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
290
0
Share
Elasticsearchベースの全文検索システムFess
FessでどのようにElasticsearchを利用しているかなどを説明しています。
Shinsuke Sugaya
June 27, 2016
More Decks by Shinsuke Sugaya
See All by Shinsuke Sugaya
FessのAI検索モード:検索システムとLLMへの取り組み
marevol
0
500
社内ドキュメント検索システム構築のノウハウ
marevol
0
450
LastaFluteでKotlinをはじめよう
marevol
0
480
日本最大級の求人検索エンジン「スタンバイ」を支える技術
marevol
2
1k
Fess/Elasticsearchを使った業務で使える?全文検索への道
marevol
0
1.3k
PredictionIO構築入門
marevol
0
4.3k
PredictionIOのPython対応計画
marevol
0
4.2k
全文検索システムFessを用いた 検索システム構築入門
marevol
0
3.1k
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
marevol
0
320
Other Decks in Technology
See All in Technology
ポスター発表&デモと総括 / Poster Presentations & Demonstrations and Summary
ks91
PRO
0
190
long-running-tasks
cipepser
3
460
プラットフォームエンジニア ワークショップ/ platform-workshop
databricksjapan
0
170
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
810
Claude Codeですべての日常業務を爆速化しよう!
minorun365
PRO
17
16k
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
320
形式手法特論:公平性制約の位相的特徴づけ #kernelvm / Kernel VM Study Kansai 12th
ytaka23
1
690
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
140
Spring AI × MCP 入門〜AIエージェントへのツール公開、境界設計から始める最小構成 〜
yuyamiyamoto
0
210
Ruby::Boxでできること、Refinementsでできること
joker1007
3
380
サプライチェーンセキュリティの空白地帯 - 信頼できる”依存性”の未来を考える
rung
PRO
2
640
Spring Boot における AOT Cache 活用テクニックと 起動時間改善事例
ntt_dsol_java
0
200
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
230
What's in a price? How to price your products and services
michaelherold
247
13k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.6k
Technical Leadership for Architectural Decision Making
baasie
3
390
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
330
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Designing for humans not robots
tammielis
254
26k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
Visualization
eitanlees
152
17k
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を用いた検索 (画像とか) まとめ