今回は、オープンソースの全文検索サーバーFessについて紹介します。
先日、とあるお客様から社内のWindowsのファイルサーバーとポータルサイトに、Fessを使って検索できるように対応をして欲しい、というご相談がありました。
お客様がFessを使った対応をご指定されている理由は、次の2つです。
- 先方でも多少の知見があること
- 構築費用があまり捻出できないので、極力既存のモノで安価に構築したい
そこで、まずはFessについて調査することにしました。
後半では、今回の調査でわかった課題や、導入時の検討すべきことについてまとめています。
そもそもFessって何?
Fessは無料で利用できる全文検索エンジンプロダクトです。特徴は「エンドユーザー向け検索機能」と「設定など管理者向け機能」がセットになっていることです。
「全文検索」についての詳細な説明は割愛します。気になる方は、Elasticのサイトがわかり易いのでご覧ください。
Fessの内部にはElasticSearchが同梱されていますが、外部のElasticSearchを指定することも可能です。
内部で持つ場合、結構メモリを消費するため、低スペックだとしばらく応答がなくなる現象が発生するようです。本家のElasticSearchのSaaSサービスを利用することでこの問題は解消されます。
ただ、こちらを利用するとサービス利用料がかかってきます。
なので、動作環境(スペック)を考慮してどちらにするか検討するといいかと思います。
あと、JAVAが動けばどのOSでも問題なく動きます。詳細は、Fess公式サイトをご覧ください。
また、エヌツーシステムという会社が商用展開しており、そこにあるデモサイトでFessの検索を試せますよ。
ElasticSerch
Fessでどんなことできる?
- いろいろなデータソースに対する検索
- さまざまな検索条件
- 管理機能
- さまざまな検索対象ファイルに対応
- 辞書登録機能
- API
- オープンソース
いろいろなデータソースに対する検索
いろんなデータソースに対してクロールして収集したデータをもとに検索ができます。
具体的には、まず、Webサイトをクロールしてサイト内検索ができます。
つぎに、ファイルサーバーやローカルディレクトリに対してのファイル検索や、ファイル内のテキストを検索対象にした検索もできます。
また、MySQLなどのデータソースに対する検索もできるので、活用用途が多いと思います。
さまざまな検索条件
Fessの検索条件は、よくある部分一致、完全一致、除外文字といった条件だけでなく、その他にもさまざまな条件を細かく指定した検索ができます。
具体的には、つぎのような検索方法があります。
検索方法 | 内容 |
---|---|
AND検索 | 複数の検索語がすべて含まれるドキュメントを検索する |
OR検索 | 複数の検索語のうち、どれかが含まれるドキュメントを検索する |
NOT検索 | ある単語を含まないドキュメントを検索する場合に使用 |
ラベル指定検索(カテゴリ検索) | 検索対象のドキュメントにカテゴリ分けするためのラベル情報を付加することで、検索時にラベルを指定した絞り込み検索を行う |
フィールド指定検索 | Fess でクロールした結果はタイトルや本文などの各フィールドごとに保存されます。 それらのフィールドを指定して検索する |
ソート検索 | 検索日時などのフィールドを指定して検索結果をソートする |
ワイルド検索 | 検索語内で 1文字または複数文字のワイルドカードを利用して検索する |
範囲指定検索 | 数値など範囲指定が可能でデータをフィールドに格納している場合、そのフィールドに対して範囲指定検索する |
ブースト検索(重み付け検索) | 検索語のうち、特定の検索語を優先したい場合に、検索語の重要度に応じた検索をする |
曖昧検索(ファジー検索) | 検索語に完全一致しない単語も検索する場合の検索方法 |
位置情報検索 | インデックス生成時に各ドキュメントに対して緯度経度の位置情報を付加することで、検索時に位置情報を用いた検索をする |
非表示検索条件 | 画面上には検索条件の文字列を表示せずに特定の検索条件を引き回したい場合に、ex_qパラメータを利用する。ページングで画面遷移しても、その条件を画面に表示することなく、条件を保持することができる |
ロール検索 | Fessのユーザー管理機能を利用して、ユーザーがログインすることで利用できる検索方法。Fessの管理するユーザーでログイン後、ロール検索やユーザーのパスワードを変更 |
特殊文字の検索 | 以下のような特殊文字をエスケープすることで検索文字として利用できる - && || ! ( ) { } ^ " ~ * ? : \ / |
詳細検索 | 詳細検索画面から、より複雑な条件で検索する |
管理機能
Fessは管理機能を持っていて、たとえばクロール対象やスケジュール機能など、ひと通りの設定ができます。
具体的にどんな設定があるかは、Fess公式サイトの管理者ガイドをチェックしてみてください。
さまざまな検索対象ファイルに対応
さまざまな検索対象ファイルに対応
Fessの検索対象ファイル
- テキスト (txt)
- XML (xml, xhtml, mm等)
- HTML (html, htm)
- MS Office (doc, xls, ppt, docx, xlsx, pptx等)
- PDF (pdf等)
- ソースコード (js, c, h, java等)
- 圧縮ファイル (gz, tar, zip等)
- リッチテキスト (rtf)
- ePub
- 音声/画像/動画 (メタデータの抽出)
- mbox
- aiファイル (PDF互換)
辞書登録機能
辞書登録機能があるので、たとえば、「サンエル」と「sunl」で固有名詞のマッピングをしたい場合は、個別に辞書登録することで対応できます。
API
APIがあるので、ウェブシステムなど外部から簡単に検索エンジンを呼び出して使うことができます。
ただし、GET系のみなので、クロール設定とか管理者向けの更新系APIはありません。
APIの仕様については、Fess公式サイトのAPIガイドをご覧ください。
オープンソース
オープンソースなので改変は自由に行えます。ソースはgithubから落とせます。
ただし、カスタマイズするにはFessに対する一定の知識が必要です。
(参考)Fess利用の推奨スペック
公式には公表されていませんが、結構スペックが必要そうです。
以下、Fess導入会社の情報を参考として紹介します。
(参考)Fess利用の推奨スペック
なお、手っ取り早くローカルで検証したいなら、Dockerでサクッといけますよ。
今回のFessの調査でわかった2つの課題
試しにローカルのDockerでFessを動かしてみましたが、次の2つが課題となりそうです。
課題1|パワポ検索出てこない問題
検証に使ったパワーポイントは、クロールで認識されインデックス登録されるが、ファイル内のテキストで検索しても検索結果に反映されない。
パワーポイントはサポートされているので、検索されない特定条件がありそうで、調査検証が必要です。
課題2|設定チューニング
たとえば大量のファイルが検索対象の場合、サーバースペックも考慮した適切な設定値になってないとサーバーがダウンする場合がある。
実際にローカルで数百ファイルあるディレクトリを検索させたら、途中でtimeoutして、そのままハングアップしました。
Fessを導入する場合に検討すべきこと
Fessを導入するにあたり、最低限つぎの3つは確認、検討しておいた方がよいかと思います。
1つ目は、対象データの全容量を把握しておくことです。
これが分からないと用意すべきディスク容量が決まらないです。また、設定チューニングがどこまで必要か変わってきます。
つぎに、検索対象のデータやファイルの種類を明確にして、それらがFessでサポートされてる内容でカバーできてるかどうかを確認しておいた方がよいです。
最後は、対象データの環境です。
たとえば、利用するのはウェブシステムなのかストレージなのか、AD(Active Directory)など認証があるのかどうかなど、対象によって設定内容が変わります。
【まとめ】オープンソース型全文検索サーバーFessの調査
今回Fessについて調査しましたがが、所感としては、オンプレ環境の社内ファイルサーバーやWebサーバーに対して、簡易に全文検索を入れたい場合は、結構便利そうな感じがします。
GUI作らなくて良いですし。
ただ、画面を細かくカスタマイズしないといけない場合は、あまり向かない気がします。
もちろんオープンソースなのでカスタマイズ可能ですが、結局、たとえばアップデートの対応どうするのか等、メンテナンスコストがつきまとうので得策だとは思えません。
今後も、世の中にあるさまざまなITツールやサービスについて紹介していくので、お楽しみに。