Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elasticsearchベースの全文検索システムFess
Search
Shinsuke Sugaya
June 27, 2016
Technology
0
250
Elasticsearchベースの全文検索システムFess
FessでどのようにElasticsearchを利用しているかなどを説明しています。
Shinsuke Sugaya
June 27, 2016
Tweet
Share
More Decks by Shinsuke Sugaya
See All by Shinsuke Sugaya
社内ドキュメント検索システム構築のノウハウ
marevol
0
410
LastaFluteでKotlinをはじめよう
marevol
0
420
日本最大級の求人検索エンジン「スタンバイ」を支える技術
marevol
2
970
Fess/Elasticsearchを使った業務で使える?全文検索への道
marevol
0
1.3k
PredictionIO構築入門
marevol
0
4.3k
PredictionIOのPython対応計画
marevol
0
4.1k
全文検索システムFessを用いた 検索システム構築入門
marevol
0
3k
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
marevol
0
280
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
marevol
0
560
Other Decks in Technology
See All in Technology
今、MySQLのバックアップを作り直すとしたら何がどう良いのかを考える旅
yoku0825
2
420
アジャイル社内普及ご近所さんマップを作ろう / Let's create an agile neighborhood map
psj59129
1
130
単一Kubernetesクラスタで実現する AI/ML 向けクラウドサービス
pfn
PRO
1
140
Flutterにしてよかった?出前館アプリを2年運用して気づいたことを全部話します
demaecan
0
230
AI × クラウドで シイタケの収穫時期を判定してみた
lamaglama39
1
350
マルチドライブアーキテクチャ: 複数の駆動力でプロダクトを前進させる
knih
0
1.5k
ABEJA FIRST GUIDE for Software Engineers
abeja
0
3.2k
LINEスキマニ/LINEバイトにおけるバックエンド開発
lycorptech_jp
PRO
0
290
Perlブートキャンプ
hatena
0
240
ソフトウェア開発現代史: 55%が変化に備えていない現実 ─ AI支援型開発時代のReboot Japan #agilejapan
takabow
7
4.4k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
4
1.4k
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
0
190
Featured
See All Featured
Fireside Chat
paigeccino
41
3.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Done Done
chrislema
186
16k
Documentation Writing (for coders)
carmenintech
76
5.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Speed Design
sergeychernyshev
32
1.2k
BBQ
matthewcrist
89
9.9k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Transcript
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のコード例 @Resource private 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勉強会 Fessの検索結果画面 デモ:http://search.n2sm.co.jp/
第16回elasticsearch勉強会 まとめ
第16回elasticsearch勉強会 ▪ Fess 10 ➔ オープンソースの全文検索システム ➔ Elasticsearchのリリースに合わせて更新 ▪ Fessの今後
➔ より大規模検索へ (対象容量が数十TBへ) ➔ Deep Learningを用いた検索 (画像とか) まとめ