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