A presentation at JJUGナイトセミナー in March 2020 in Tokyo, Japan by Jun Ohtani
本当にその検索は 自分が想像している検索になっ てますか? 2020/02/18 JJUGナイトセミナー Jun Ohtani @johtan 1 — JJUG Night Seminar 20200218
自己紹介 ▸ フリーランスエンジニア(仮) ▸ Apache Solr入門(第2版まで)やデータ分析 基盤構築入門の著者の一人 ▸ KibanaのAnalyze API UI pluginの作者 2 — JJUG Night Seminar 20200218
今日話すこと ▸ 検索エンジンの仕組み ▸ Lucene/Elasticsearchの仕組み ▸ 検索システムに出てくる要素とか 3 — JJUG Night Seminar 20200218
話さないこと ▸ 個別の検索エンジン、検索サービスの使 い方 ▸ 検索システムの運用 ▸ 画像検索、音声検索 4 — JJUG Night Seminar 20200218
アジェンダ ▸ 検索とは? ▸ Grepと全文検索の違い ▸ Lucene/Elasticsearchの仕組み ▸ よりよい検索にするためには? 5 — JJUG Night Seminar 20200218
「Java」で検索したときに出 てきてほしいものは? 6 — JJUG Night Seminar 20200218
どっちが出てきてほしいですか? ▸ あなたとJava、今すぐダウンロード ▸ JavaScriptという言葉は狭義にはMozilla が仕様を策定し実装しているスクリプト 言語を指す。 7 — JJUG Night Seminar 20200218
「Exception」で検索したと きに出てきてほしいものは? 8 — JJUG Night Seminar 20200218
どれが出てきてほしいですか? ▸ java.lang.Exception ▸ java.lang.IllegalArgumentException ▸ java.io.FileNotFoundException 9 — JJUG Night Seminar 20200218
検索とは 検索とは、データの集合の中から目的の データを探し出すことである。 また、目的のデータが存在しないことの 確認行為も含まれる。 Wikipediaより https://ja.wikipedia.org/wiki/ 10 — JJUG Night Seminar 20200218
どっちが出てきてほしいですか? ▸ あなたとJava、今すぐダウンロード ▸ JavaScriptという言葉は狭義にはMozilla が仕様を策定し実装しているスクリプト 言語を指す。 11 — JJUG Night Seminar 20200218
どれが出てきてほしいですか? ▸ java.lang.Exception ▸ IllegalArgumentException ▸ FileNotFoundException 12 — JJUG Night Seminar 20200218
検索ユースケース ▸ 図書館 ▸ 本 ▸ Grep ▸ Webサービス(Google,Yahoo!,Bingなどな 13 — JJUG Night Seminar 20200218
検索ユースケース - 図書館 14 — JJUG Night Seminar 20200218
検索ユースケース - 図書館 15 — JJUG Night Seminar 20200218
検索ユースケース - 本 16 — JJUG Night Seminar 20200218
検索ユースケース - Grep 17 — JJUG Night Seminar 20200218
検索ユースケース - Webサービス 18 — JJUG Night Seminar 20200218
検索の種類 ▸ ディレクトリ型検索 ▸ キーワード検索 ▸ 音声検索 ▸ 画像検索 19 — JJUG Night Seminar 20200218
Grepと全文検索の違い ▸ Grep - 部分一致(文字一致) ▸ 全文検索 - 転置インデックスを元に検索 (詳しくは後述) 20 — JJUG Night Seminar 20200218
Grepと全文検索の違い - Grep 21 — JJUG Night Seminar 20200218
Grepと全文検索の違い - 全文検索 22 — JJUG Night Seminar 20200218
Lucene/Elasticsearchの仕組み - Index 1. ドキュメントの文字列を単語に分割 ▸ Text Analysis 2. 分割された単語で転置インデックス構築 ▸ Indexer / Inverted Index 23 — JJUG Night Seminar 20200218
Text Analysis - Elasticsearch ▸ 入力文字列を一定のルールに基づいて、 単語列にして出力する ▸ Analyzerと呼ばれる仕組みにより実現 24 — JJUG Night Seminar 20200218
Text Analysis - English 25 — JJUG Night Seminar 20200218
Analyzer Architecture - Elasticsearch 26 — JJUG Night Seminar 20200218
Demo - Kibaan Analyze API UI plugin 27 — JJUG Night Seminar 20200218
Text Analysis - Japanese 28 — JJUG Night Seminar 20200218
Text Analysis - Japanese 29 — JJUG Night Seminar 20200218
Inverted Index - Elasticsearch 30 — JJUG Night Seminar 20200218
Lucene/Elasticsearchの仕組み - Query 1. クエリの文字列を単語に分割 ▸ Query Parser / Analyzer 2. 分割された単語で転置インデックス検索 ▸ Searcher / Inverted Index 31 — JJUG Night Seminar 20200218
Query Parser / Analyzer - Elasticsearch 32 — JJUG Night Seminar 20200218
Inverted Index - Elasticsearch 33 — JJUG Night Seminar 20200218
Query Parser / Analyzer - Elasticsearch 34 — JJUG Night Seminar 20200218
Query Parser / Analyzer - Elasticsearch ▸ デフォルトはOR検索 ▸ ANDにも変更可能 35 — JJUG Night Seminar 20200218
Inverted Index - Elasticsearch 36 — JJUG Night Seminar 20200218
フレーズ(熟語)は? ▸ 「検索」「システム」と別れて出てくる ▸ 普通に検索すると、個別の単語として検 索 37 — JJUG Night Seminar 20200218
Phrase Query - Elasticsearch 38 — JJUG Night Seminar 20200218
フレーズ検索 - Elasticsearch ▸ 単語の出現位置も考慮して結果を返す 39 — JJUG Night Seminar 20200218
正規表現?(前方一致とか) ^私は* できると思います? 40 — JJUG Night Seminar 20200218
正規表現? 41 — JJUG Night Seminar 20200218
Regexp Query - Elasticsearch ▸ ElasticsearchにもRegexp Queryというも のがある ▸ これは、単語の一覧に対して正規表現で 検索 42 — JJUG Night Seminar 20200218
検索結果の並び順 ▸ 検索エンジンはスコアでソート可能 ▸ もちろんスコア以外の項目でソートも可 能 43 — JJUG Night Seminar 20200218
スコア? ▸ BM25 ▸ TF-IDF 44 — JJUG Night Seminar 20200218
その他の検索の機能 ▸ ファセット - 絞り込みのヒントとして ▸ Geo検索 - 位置検索 ▸ ハイライト - どこがマッチした? ▸ サジェスト - オートコンプリーション 45 — JJUG Night Seminar 20200218
よりよい検索にするためには? 検索エンジンだけでは対応できないことが いっぱい ▸ UI/UX ▸ 検索ログ ▸ 検索結果の評価 46 — JJUG Night Seminar 20200218
検索システムでの選択肢 - ミドルウェ ア ▸ RDB ▸ Apache Solr / Elasticsearch ▸ Groongaファミリー ▸ etc. 47 — JJUG Night Seminar 20200218
検索システムでの選択肢 - SaaS ▸ Algolia ▸ Elastic Cloud App Search ▸ Azure Cognitive Search ▸ Amazon CloudSearch / etc. 48 — JJUG Night Seminar 20200218
まとめ ▸ Grepと検索の仕組みの違い ▸ 仕組みをしることで何ができて何ができ ないかを理解 ▸ また、なにが問題でうまく動いてない 49 — JJUG Night Seminar 20200218
Thanks! @johtani 50 — JJUG Night Seminar 20200218
おすすめ本 https://booth.pm/ja/items/1865120 51 — JJUG Night Seminar 20200218
参考文献 ▸ Elasticsearch: The Definitive Guide ▸ Luceneのインデックスファイル構造 ▸ Analyze API UI plugin 52 — JJUG Night Seminar 20200218
[WIP] ほかにも書い ていきたいこと 53 — JJUG Night Seminar 20200218
Elasticsearchの検索のフェーズの話 ▸ QueryフェーズとFetchフェーズ ▸ dfs ▸ Aggsとの関係 54 — JJUG Night Seminar 20200218
転置インデックス詳細 ▸ term dictionary ▸ postings list 55 — JJUG Night Seminar 20200218
スコアの詳細? ▸ 式とか? ▸ Script Scoreとか 56 — JJUG Night Seminar 20200218
57 — JJUG Night Seminar 20200218
View 本当にその検索は自分が想像している検索になってますか? on Notist.
Dismiss
2月のJJUGナイトセミナーで話をする予定だったスライドです。 今後もブラッシュアップする予定ですが、一旦公開。 n-gramについて追記しようかな
The following resources were mentioned during the presentation or are useful additional information.