Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

FessはSolrベースの全文検索システムです。
Solrベースの全文検索システムを構築する上で遭遇する問題などを含めて、Fessについてご紹介します。

Shinsuke Sugaya

September 03, 2014
Tweet

More Decks by Shinsuke Sugaya

Other Decks in Technology

Transcript

  1.  名前: 菅谷信介  所属: 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/ 自己紹介
  2. 検索システム Fess、商用検索システム(GSAとか) 検索サーバ+クローラ Hyper Estraier、Namazu、Nutchなど 検索サーバ Solr、Elasticsearch、groongaなど 検索ライブラリ Luceneなど 検索関連のソフトウェア

    検索関連の知識が必要(ガッツリ作りこみが必要) 検索関連の知識なくても利用可能(すぐに使える) ざっくりと個人的な観点で分類してみました
  3.  簡単に構築可能なオープンソースの全文検索サーバ  Javaがあれば、すぐに利用できます!  Fess 9.2ではSolr 4.8.1を採用(同梱してます)  Web、共有フォルダ、DBなどのクロール可能

     MS Office、PDF、圧縮ファイルもサポート  独自の実装&Tikaで読めるだけ読む  検索画面はPCからスマホまで最適化された画面で検索  ブラウザによる管理画面  ActiveDirectory等の認証情報で検索結果の出し分け可能  登録したカテゴリごとに検索可能  ファセット検索やジオ・サーチにも対応  検索ログやクリックログで集計  サジェストや関連表示などにも対応  スクリーンショット表示機能 Fessとは
  4.  N2SMではFess(Solrを含む)に関する商用サポートを提供  導入支援からカスタマイズ開発まで  いろいろな質問等の対応  商用製品としては、N2 Searchとして提供 

    基本はFessと同じ(ブランチ管理されている)  設定を最適化したパッケージを利用  ApacheやMySQLなど含めて提供  管理ユーザなどを管理するコンソール  ASPとしても提供  その他  いろいろとお問い合わせをいただいています  入札要件にFessが指定されていたりも… 商用サポート
  5. 概要  http://~ の検索結果ページで、検索結果の file://~ の リンクが機能しない  Fessを作った当初はブラウザで機能していたが、時間と ともに

    file://~ の扱いが厳しくなった  汎用的な解決策がない Fessでの対応  デスクトップ検索  ローカル環境でしか利用できない  ファイルランチャー  Java Web Startを利用→いろいろと面倒…  コンテンツプロキシ (デフォルト)  Fessがプロキシとして動作してコンテンツを返却  場合によりロール検索と組み合わせが必要 file://~問題
  6. 概要  社内ドキュメント検索の場合によくある話  数台のサーバ環境かつ夜間バッチ等で、数百万ドキュメン トを超えるドキュメントを更新する要件  差分クロールで解決できる範囲ではない  ファイルサイズやネットワークに依存するが、1台でク

    ロールすると、1時間あたり数万ドキュメントくらい  実際には全件更新する必要がない Fessでの対応  ファイルサーバの更新ファイル一覧生成機能と連携  データストアクロールで対応  CSVなどの更新ファイル一覧情報を元にクロール  更新ファイルだけを効率よくインデックス化 クロール時間問題
  7. 概要  複雑なスケジュールでクロールやインデックスのコミット などを組みたい  昔のFessでは基本は1つのスケジュールを組んで、クロー ルからインデックスまで行う方式でした Fessでの対応  ジョブ管理機能を実装しました

     ログのパージなどもジョブとして処理  Groovyで任意のジョブを組むことができます  他のスクリプト言語も対応可能ですが、現時点では Groovyだけをサポート クロールジョブ問題
  8. 概要  クロールのスレッドが止まる事象が発生する  Javaのバグ  Zip爆弾(Excelも?) Fessでの対応  昔のFessではTomcat上のスレッドでクロールを実行してい

    たがスレッドを停止できないため、現在は別のプロセスと してクロールを実行  Zip爆弾等は利用するライブラリを更新したり、独自の拡張 したりして対応 クロール停止問題
  9. 概要  FessではPDFBoxでPDFからテキスト抽出を行っている  PDF仕様の古いバージョンなどで文字化けする Fessでの対応  テキスト抽出処理はS2Robotで管理している  設定ファイルでMIMEタイプごとに処理をカスタマイズ可能

     対応はケースバイケースですが、コマンド呼び出しや IFilterなど、要件に応じた対応が必要  MS Office系のファイルのテキスト抽出はPOIを利用してい るが、抽出できないものがあれば同様の対応 PDF文字化け問題
  10. 概要  そのときのクリック数やお気に入り数でソートしたい  クリック数やお気に入り数はSolr内でドキュメントに含ま れている  ドキュメントを更新して、コミットしないと情報が 反映されない 

    クリックされるたびにコミットするのは微妙… Fessでの対応  クリック数やお気に入り数の数値はDocValueのフィールド として格納する  Solrで更新するインターフェースがなかったため、Fessで は数値のDocValueを更新するSolrプラグインを提供 リアルタイム更新問題
  11. 概要  形態素解析やシノニムなどの辞書はインデックスで初回に 読み込まれる  辞書の反映に再起動&再インデクシングが必要  政治的な要件な気がする Fessでの対応 

    辞書を動的に再読み込みをする拡張  Tokenizerのインスタンスを動的に差し替える  再インデクシングは必要  積極的に採用するかは置いておいて… 辞書反映問題
  12. Q&A