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