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