全文検索サーバ Fess 全文検索システム構築時の悩みどころ 
第14回Solr勉強会
名前: 菅谷信介 
所属: N2SM, Inc. (http://www.n2sm.net/) 
オープンソース活動: 
Apache Portals コミッタ 
Seasarプロジェクトコミッタ 
CodeLibsプロジェクト運営 (https://github.com/codelibs) などなど・・・ 
Github: https://github.com/codelibs 
Blog: http://www.chazine.com/ 
Twitter: https://twitter.com/shinsuke_sugaya/ 
自己紹介
アジェンダ 
検索ソフトウェアについて 
Fessとは 
全文検索システム構築の悩みどころ 
Fessの今後
FessはSolrベースの 全文検索サーバです。 検索関連のソフトウェアは いろいろとあるけど まずは全体的なところから…
検索システム 
Fess、商用検索システム(GSAとか) 検索サーバ+クローラ 
Hyper Estraier、Namazu、Nutchなど 検索サーバ 
Solr、Elasticsearch、groongaなど 検索ライブラリ 
Luceneなど 
検索関連のソフトウェア 
検索関連の知識が必要(ガッツリ作りこみが必要) 
検索関連の知識なくても利用可能(すぐに使える) 
ざっくりと個人的な観点で分類してみました
つまり、 FessはSolrと競合するものでは ありません (ターゲットユーザーが異なります)
Fessとは
簡単に構築可能なオープンソースの全文検索サーバ 
Javaがあれば、すぐに利用できます! 
Fess 9.2ではSolr 4.8.1を採用(同梱してます) 
Web、共有フォルダ、DBなどのクロール可能 
MS Office、PDF、圧縮ファイルもサポート 
独自の実装&Tikaで読めるだけ読む 
検索画面はPCからスマホまで最適化された画面で検索 
ブラウザによる管理画面 
ActiveDirectory等の認証情報で検索結果の出し分け可能 
登録したカテゴリごとに検索可能 
ファセット検索やジオ・サーチにも対応 
検索ログやクリックログで集計 
サジェストや関連表示などにも対応 
スクリーンショット表示機能 
Fessとは
すぐに利用できるようにオールインワンで提供 
アーキテクチャ 
Solr インデックス管理 
Fess クローラ 設定情報管理 検索画面 
Tomcat (アプリケーションサーバなど)
Fessの検索結果画面 
デモ:http://search.n2sm.co.jp/
Fessの管理画面
N2SMではFess(Solrを含む)に関する商用サポートを提供 
導入支援からカスタマイズ開発まで 
いろいろな質問等の対応 
商用製品としては、N2 Searchとして提供 
基本はFessと同じ(ブランチ管理されている) 
設定を最適化したパッケージを利用 
ApacheやMySQLなど含めて提供 
管理ユーザなどを管理するコンソール 
ASPとしても提供 
その他 
いろいろとお問い合わせをいただいています 
入札要件にFessが指定されていたりも… 
商用サポート
全文検索システム構築時の 悩みどころ Solrベースの検索システムを作る際のご参考になれば…
Fessのコミュニティや Fess案件を通して 遭遇する事象ベースに 考えてみる…
ケース1 ファイルシステムをクロールして 検索結果をクリックしても 表示されないのですけど…
概要 
http://~ の検索結果ページで、検索結果の file://~ の リンクが機能しない 
Fessを作った当初はブラウザで機能していたが、時間と ともに file://~ の扱いが厳しくなった 
汎用的な解決策がない Fessでの対応 
デスクトップ検索 
ローカル環境でしか利用できない 
ファイルランチャー 
Java Web Startを利用→いろいろと面倒… 
コンテンツプロキシ (デフォルト) 
Fessがプロキシとして動作してコンテンツを返却 
場合によりロール検索と組み合わせが必要 
file://~問題
ケース2 社内の数百万ドキュメントを 夜間バッチで更新したいです でも、1台くらいで…
概要 
社内ドキュメント検索の場合によくある話 
数台のサーバ環境かつ夜間バッチ等で、数百万ドキュメン トを超えるドキュメントを更新する要件 
差分クロールで解決できる範囲ではない 
ファイルサイズやネットワークに依存するが、1台でク ロールすると、1時間あたり数万ドキュメントくらい 
実際には全件更新する必要がない Fessでの対応 
ファイルサーバの更新ファイル一覧生成機能と連携 
データストアクロールで対応 
CSVなどの更新ファイル一覧情報を元にクロール 
更新ファイルだけを効率よくインデックス化 
クロール時間問題
ケース3 Webは月曜、 共有フォルダは水曜、 DBは金曜に クロールしたいのだけど…
概要 
複雑なスケジュールでクロールやインデックスのコミット などを組みたい 
昔のFessでは基本は1つのスケジュールを組んで、クロー ルからインデックスまで行う方式でした Fessでの対応 
ジョブ管理機能を実装しました 
ログのパージなどもジョブとして処理 
Groovyで任意のジョブを組むことができます 
他のスクリプト言語も対応可能ですが、現時点では Groovyだけをサポート 
クロールジョブ問題
ケース4 クロールが止まるのですけど…
概要 
クロールのスレッドが止まる事象が発生する 
Javaのバグ 
Zip爆弾(Excelも?) Fessでの対応 
昔のFessではTomcat上のスレッドでクロールを実行してい たがスレッドを停止できないため、現在は別のプロセスと してクロールを実行 
Zip爆弾等は利用するライブラリを更新したり、独自の拡張 したりして対応 
クロール停止問題
ケース5 PDFをクロールしたのですが 文字化けしているようです…
概要 
FessではPDFBoxでPDFからテキスト抽出を行っている 
PDF仕様の古いバージョンなどで文字化けする Fessでの対応 
テキスト抽出処理はS2Robotで管理している 
設定ファイルでMIMEタイプごとに処理をカスタマイズ可能 
対応はケースバイケースですが、コマンド呼び出しや IFilterなど、要件に応じた対応が必要 
MS Office系のファイルのテキスト抽出はPOIを利用してい るが、抽出できないものがあれば同様の対応 
PDF文字化け問題
ケース6 クリック数やお気に入り数で リアルタイムに ソートしたいです…
概要 
そのときのクリック数やお気に入り数でソートしたい 
クリック数やお気に入り数はSolr内でドキュメントに含ま れている 
ドキュメントを更新して、コミットしないと情報が 反映されない 
クリックされるたびにコミットするのは微妙… Fessでの対応 
クリック数やお気に入り数の数値はDocValueのフィールド として格納する 
Solrで更新するインターフェースがなかったため、Fessで は数値のDocValueを更新するSolrプラグインを提供 
リアルタイム更新問題
ケース7 辞書ファイルを更新するのに 再起動が必要なの?
概要 
形態素解析やシノニムなどの辞書はインデックスで初回に 読み込まれる 
辞書の反映に再起動&再インデクシングが必要 
政治的な要件な気がする Fessでの対応 
辞書を動的に再読み込みをする拡張 
Tokenizerのインスタンスを動的に差し替える 
再インデクシングは必要 
積極的に採用するかは置いておいて… 
辞書反映問題
まとめ Fessの今後
Fessの今後 
Solrの更新と共に、今後も更新していきます! 
検索ログを利用したサジェストも導入 
現在はコンテンツベース 
キーマッチ機能 
独自のQuery Elevation 
Go for Global! 
検索ログの表示や分析方法の改善
Q&A

全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ