31
全文検索サーバ Fess 全文検索システム構築時の悩みどころ 第14回Solr勉強会

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

第14回Solr勉強会

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

名前: 菅谷信介 所属: 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/

自己紹介

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

アジェンダ

検索ソフトウェアについて Fessとは 全文検索システム構築の悩みどころ Fessの今後

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

FessはSolrベースの 全文検索サーバです。

検索関連のソフトウェアは

いろいろとあるけど まずは全体的なところから…

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

検索システム Fess、商用検索システム(GSAとか)

検索サーバ+クローラ Hyper Estraier、Namazu、Nutchなど

検索サーバ Solr、Elasticsearch、groongaなど

検索ライブラリ Luceneなど

検索関連のソフトウェア

検索関連の知識が必要(ガッツリ作りこみが必要)

検索関連の知識なくても利用可能(すぐに使える)

ざっくりと個人的な観点で分類してみました

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

つまり、 FessはSolrと競合するものでは

ありません (ターゲットユーザーが異なります)

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

Fessとは

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

簡単に構築可能なオープンソースの全文検索サーバ Javaがあれば、すぐに利用できます! Fess 9.2ではSolr 4.8.1を採用(同梱してます)

Web、共有フォルダ、DBなどのクロール可能 MS Office、PDF、圧縮ファイルもサポート

独自の実装&Tikaで読めるだけ読む 検索画面はPCからスマホまで最適化された画面で検索 ブラウザによる管理画面 ActiveDirectory等の認証情報で検索結果の出し分け可能 登録したカテゴリごとに検索可能 ファセット検索やジオ・サーチにも対応 検索ログやクリックログで集計 サジェストや関連表示などにも対応 スクリーンショット表示機能

Fessとは

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

すぐに利用できるようにオールインワンで提供

アーキテクチャ

Solr インデックス管理

Fess クローラ

設定情報管理 検索画面

Tomcat (アプリケーションサーバなど)

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

Fessの検索結果画面 デモ:http://search.n2sm.co.jp/

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

Fessの管理画面

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

N2SMではFess(Solrを含む)に関する商用サポートを提供 導入支援からカスタマイズ開発まで いろいろな質問等の対応

商用製品としては、N2 Searchとして提供 基本はFessと同じ(ブランチ管理されている) 設定を最適化したパッケージを利用 ApacheやMySQLなど含めて提供 管理ユーザなどを管理するコンソール

ASPとしても提供 その他

いろいろとお問い合わせをいただいています 入札要件にFessが指定されていたりも…

商用サポート

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

全文検索システム構築時の 悩みどころ

Solrベースの検索システムを作る際のご参考になれば…

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

Fessのコミュニティや Fess案件を通して

遭遇する事象ベースに 考えてみる…

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

ケース1

ファイルシステムをクロールして 検索結果をクリックしても 表示されないのですけど…

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

概要 http://~ の検索結果ページで、検索結果の file://~ の

リンクが機能しない Fessを作った当初はブラウザで機能していたが、時間と

ともに file://~ の扱いが厳しくなった 汎用的な解決策がない

Fessでの対応 デスクトップ検索

ローカル環境でしか利用できない ファイルランチャー

Java Web Startを利用→いろいろと面倒… コンテンツプロキシ (デフォルト)

Fessがプロキシとして動作してコンテンツを返却 場合によりロール検索と組み合わせが必要

file://~問題

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

ケース2

社内の数百万ドキュメントを 夜間バッチで更新したいです

でも、1台くらいで…

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

概要 社内ドキュメント検索の場合によくある話 数台のサーバ環境かつ夜間バッチ等で、数百万ドキュメン

トを超えるドキュメントを更新する要件 差分クロールで解決できる範囲ではない ファイルサイズやネットワークに依存するが、1台でク

ロールすると、1時間あたり数万ドキュメントくらい 実際には全件更新する必要がない

Fessでの対応 ファイルサーバの更新ファイル一覧生成機能と連携 データストアクロールで対応

CSVなどの更新ファイル一覧情報を元にクロール 更新ファイルだけを効率よくインデックス化

クロール時間問題

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

ケース3

Webは月曜、 共有フォルダは水曜、

DBは金曜に クロールしたいのだけど…

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

概要 複雑なスケジュールでクロールやインデックスのコミット

などを組みたい 昔のFessでは基本は1つのスケジュールを組んで、クロー

ルからインデックスまで行う方式でした

Fessでの対応 ジョブ管理機能を実装しました ログのパージなどもジョブとして処理 Groovyで任意のジョブを組むことができます

他のスクリプト言語も対応可能ですが、現時点ではGroovyだけをサポート

クロールジョブ問題

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

ケース4

クロールが止まるのですけど…

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

概要 クロールのスレッドが止まる事象が発生する

Javaのバグ Zip爆弾(Excelも?)

Fessでの対応 昔のFessではTomcat上のスレッドでクロールを実行してい

たがスレッドを停止できないため、現在は別のプロセスとしてクロールを実行

Zip爆弾等は利用するライブラリを更新したり、独自の拡張したりして対応

クロール停止問題

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

ケース5

PDFをクロールしたのですが 文字化けしているようです…

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

概要 FessではPDFBoxでPDFからテキスト抽出を行っている PDF仕様の古いバージョンなどで文字化けする

Fessでの対応 テキスト抽出処理はS2Robotで管理している 設定ファイルでMIMEタイプごとに処理をカスタマイズ可能 対応はケースバイケースですが、コマンド呼び出しや

IFilterなど、要件に応じた対応が必要 MS Office系のファイルのテキスト抽出はPOIを利用してい

るが、抽出できないものがあれば同様の対応

PDF文字化け問題

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

ケース6

クリック数やお気に入り数で リアルタイムに

ソートしたいです…

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

概要 そのときのクリック数やお気に入り数でソートしたい クリック数やお気に入り数はSolr内でドキュメントに含ま

れている ドキュメントを更新して、コミットしないと情報が

反映されない クリックされるたびにコミットするのは微妙…

Fessでの対応 クリック数やお気に入り数の数値はDocValueのフィールド

として格納する Solrで更新するインターフェースがなかったため、Fessで

は数値のDocValueを更新するSolrプラグインを提供

リアルタイム更新問題

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

ケース7

辞書ファイルを更新するのに 再起動が必要なの?

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

概要 形態素解析やシノニムなどの辞書はインデックスで初回に

読み込まれる 辞書の反映に再起動&再インデクシングが必要 政治的な要件な気がする

Fessでの対応 辞書を動的に再読み込みをする拡張

Tokenizerのインスタンスを動的に差し替える 再インデクシングは必要 積極的に採用するかは置いておいて…

辞書反映問題

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

まとめ Fessの今後

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

Fessの今後

Solrの更新と共に、今後も更新していきます! 検索ログを利用したサジェストも導入

現在はコンテンツベース キーマッチ機能

独自のQuery Elevation Go for Global! 検索ログの表示や分析方法の改善

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

Q&A