Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Elasticsearchベースの全文検索システムFess

4,835 views

Published on

FessでどのようにElasticsearchを利用しているかなどを説明しています。

Published in: Technology
  • Be the first to comment

Elasticsearchベースの全文検索システムFess

  1. 1. Elasticsearchベースの 全文検索システムFess 第16回elasticsearch勉強会
  2. 2. 第16回elasticsearch勉強会 ■ Fessとは ■ FessにおけるElasticsearchまわりの話 ■ デモ アジェンダ
  3. 3. 第16回elasticsearch勉強会 Fessとは
  4. 4. 第16回elasticsearch勉強会 ■ オープンソースの全文検索システム ➔オールインワンで簡単に利用可能 ■ Apacheライセンスで提供 ■ Elasticsearchを検索エンジンとして利用 ■ 現在の最新バージョンは10.1 ➔2009/09にSolrベースで1.0をリリース ■ 商用サポートも提供 (N2 Search) Fessとは http://fess.codelibs.org/ja/
  5. 5. 第16回elasticsearch勉強会 クローラやUIを提供することで手軽な導入実現 検索分野での立ち位置 検索関連の知識なくても利用可能(すぐに使える) 検索関連の知識が必要(ガッツリ作りこみが必要) 検索システム ➔ Fess、商用検索システム(GSAとか) 検索サーバ+クローラ ➔ Hyper Estraier、Namazu、Nutchなど 検索サーバ ➔ Solr、Elasticsearch、groongaなど 検索ライブラリ ➔ Luceneなど
  6. 6. 第16回elasticsearch勉強会 ■ Javaの実行環境があればすぐに利用可能 ■ Web/共有フォルダ/DBなどのクロール ■ ブラウザによる操作 ■ MS Office、PDF、圧縮ファイルもサポート ■ Responsive Web Designに対応 ■ Active Directory連携 (ロール検索) ■ ファセット検索やジオ・サーチに対応 ■ ドキュメントブーストやキーマッチ機能 ■ 検索ログやクリックログで集計(表示はKibana) ■ 独自のサジェストを実装 Fessの特徴
  7. 7. 第16回elasticsearch勉強会 ■ SolrからElasticsearchへ ➔ 大規模検索の対応 ■ Seasar2/SAStrutsからLastaFluteへ ➔ 技術的負債の解消 ■ DBFluteからESFluteへ ➔ DBをやめて、すべてをESに ■ ロール検索の強化 ➔ AD/LDAPなどの連携強化 ■ 国際化 ➔ 27言語のAnalyzerを対応(10.2〜) Fess 10での変更
  8. 8. 第16回elasticsearch勉強会 すぐ利用できるようにオールインワンで提供 アーキテクチャ LastaFlute Elasticsearch Fess Crawler Lasta DI ESFlute Tomcat Boot Fess Elasticsearchは切り離すことも可能
  9. 9. 第16回elasticsearch勉強会 Fess 10のディレクトリ構造 ├── app │ ├── META-INF │ ├── WEB-INF │ ├── css │ ├── images │ └── js ├── bin │ ├── fess │ └── fess.in.sh ├── es │ ├── data │ └── plugins ├── lib │ └── classes ├── logs └── temp Fessのアプリケーション warを展開したもの 実行スクリプト Elasticsearch ・data: インデックスの格納場所 ・plugins: プラグイン ログファイル 一時ファイルファイル Tomcat Boot関連ファイル 標準でElasticsearchを同梱している
  10. 10. 第16回elasticsearch勉強会 商用サポート ■ N2SMではFessに関する商用サポートを提供 ➔ 導入支援からカスタマイズ開発まで ➔ コミュニティはベストエフォート対応だが、商用サポートでは 様々な質問にも期限内に対応 ■ 商用製品としては、N2 Searchとして提供 ➔ Fessにカスタマイズを追加して提供 ➔ 設定を最適化したパッケージを利用 ➔ 約ニ十万語の辞書をバンドル ■ ASPとしても提供 ■ お問い合わせはこちら: http://www.n2sm.net/
  11. 11. 第16回elasticsearch勉強会 Fessにおける Elasticsearchの話
  12. 12. 第16回elasticsearch勉強会 日本語検索
  13. 13. 第16回elasticsearch勉強会 ■ bi-gram/形態素解析のハイブリット検索 ➔ 1文字検索とスコア調整 ■ 標準フィールドと各言語用フィールドを作成 ➔ 例:titleとtitle_jaなど ■ bi-gram(standard_analyzer) ➔ 英数字はワード(文字数上限を設定)&ステミング ➔ マルチバイトはbi-gram ■ 形態素解析(japanese_analyzer) ➔ kuromoji-neologd (elasticsearchプラグイン) ■ ブラウザの言語設定によって、言語用フィールドを ブーストしてor検索 日本語検索
  14. 14. 第16回elasticsearch勉強会 ■ タームへの一致度が高いもののスコアを上げる ハイブリット検索 “query” : { “bool” : { “should” : [{ “match” : { “title” : { “query” : “検索語”, “type” : “phrase”, “boost” : 1.0 } },{ “match” : { “title_ja” : { “query” : “検索語”, “type” : “phrase”, “boost” : 2.0 } },{ ...
  15. 15. 第16回elasticsearch勉強会 言語自動判定
  16. 16. 第16回elasticsearch勉強会 ■ LangFieldプラグインを利用 https://github.com/codelibs/elasticsearch-langfield ■ インデクシング時にフィールドの内容を見て copy_toのような動きをする ➔ 登録するJSONには”title”:”〜”というデータを入れて、その文 が日本と判定されれば、title_jaフィールドにcopy_toする ■ language-detectionをフォークして利用 ➔ https://github.com/shuyo/language-detection 言語自動判定
  17. 17. 第16回elasticsearch勉強会 ロール検索
  18. 18. 第16回elasticsearch勉強会 ■ ログイン状態に適した検索結果を表示する ■ 検索時 ➔ ログイン時に権限情報をセッションに保存 ■ インデキシング時 ➔ ドキュメントの権限情報フィールドに保存 ■ 検索時にはbool:filter:termクエリーを利用 ロール検索
  19. 19. 第16回elasticsearch勉強会 ■ 権限情報でfilterクエリーで絞り込む ロール検索 “query” : { “bool” : { “must” : [...検索条件...], “filter” : [{ "bool" : { "should" : [ { "term" : { "role" : "1guest" } }, { "term" : { "role" : "Rguest" } } ]
  20. 20. 第16回elasticsearch勉強会 辞書の配布
  21. 21. 第16回elasticsearch勉強会 ■ Elasticsearchは分離可能なので、APIで辞書ファイ ルの操作できる必要がある ■ Conifg Syncプラグインを利用 https://github.com/codelibs/elasticsearch-configsync ■ REST APIで辞書ファイルをGET/POST ■ アップロードした情報はElasticsearchがアクセス可 能な場所にファイルとして保存できる 辞書の配布
  22. 22. 第16回elasticsearch勉強会 DBFlute/ESFlute
  23. 23. 第16回elasticsearch勉強会 ■ DBFluteはJavaの素晴らしいO/Rマッパー ➔ SpringやOracleなど様々に対応 ➔ https://github.com/dbflute ■ ESFluteはDBFluteのElasticsearch版 ■ ESFluteにより必要なJavaクラスを自動生成 ■ Elasticsearchへの通信はTransportを利用 DBFlute/ESFlute
  24. 24. 第16回elasticsearch勉強会 ■ 自動生成されたエンティティを用いてElasticsearch にアクセス可能 ESFluteのコード例 @Resource private ProductBhv productBhv; … Product product = new Product(); product.setProductDescription(form.productDescription); product.setProductCategoryCode(form.productCategoryCode); ... productBhv.insert(product, op -> { op.setRefresh(true); // 即時反映 });
  25. 25. 第16回elasticsearch勉強会 デモ
  26. 26. 第16回elasticsearch勉強会 Fessの検索結果画面 デモ:http://search.n2sm.co.jp/
  27. 27. 第16回elasticsearch勉強会 まとめ
  28. 28. 第16回elasticsearch勉強会 ■ Fess 10 ➔ オープンソースの全文検索システム ➔ Elasticsearchのリリースに合わせて更新 ■ Fessの今後 ➔ より大規模検索へ (対象容量が数十TBへ) ➔ Deep Learningを用いた検索 (画像とか) まとめ

×