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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Shinsuke Sugaya
June 27, 2016
Technology
270
0
Share
Elasticsearchベースの全文検索システムFess
FessでどのようにElasticsearchを利用しているかなどを説明しています。
Shinsuke Sugaya
June 27, 2016
More Decks by Shinsuke Sugaya
See All by Shinsuke Sugaya
社内ドキュメント検索システム構築のノウハウ
marevol
0
430
LastaFluteでKotlinをはじめよう
marevol
0
470
日本最大級の求人検索エンジン「スタンバイ」を支える技術
marevol
2
1k
Fess/Elasticsearchを使った業務で使える?全文検索への道
marevol
0
1.3k
PredictionIO構築入門
marevol
0
4.3k
PredictionIOのPython対応計画
marevol
0
4.2k
全文検索システムFessを用いた 検索システム構築入門
marevol
0
3k
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
marevol
0
300
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
marevol
0
610
Other Decks in Technology
See All in Technology
Babylon.js を使って試した色々な内容 / Various things I tried using Babylon.js / Babylon.js 勉強会 vol.5
you
PRO
0
270
AI前提とはどういうことか
daisuketakeda
0
170
チームで育てるAI自走環境_20260409
fuktig
0
990
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
170
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.4k
レガシーシステムをどう次世代に受け継ぐか
tachiiri
0
330
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
6
7.2k
解剖"React Native"
hacusk
0
120
Data Enabling Team立ち上げました
sansantech
PRO
0
300
Discordでリモートポケカしてたら、なぜかDOを25分間動かせるようになった話
umireon
0
110
AI環境整備はどのくらい開発生産性を変えうるか? #AI駆動開発 #AI自走環境
ucchi0909
0
110
Bluesky Meetup in Tokyo vol.4 - 2023to2026
shinoharata
0
140
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
68
38k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
93
Designing Powerful Visuals for Engaging Learning
tmiket
1
330
Optimising Largest Contentful Paint
csswizardry
37
3.6k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
110
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Building the Perfect Custom Keyboard
takai
2
720
How GitHub (no longer) Works
holman
316
150k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
480
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
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を用いた検索 (画像とか) まとめ