本当にその検索は自分が想像している検索になってますか?

A presentation at Open Source Conference 2020 Online/Hiroshima in September 2020 in Hiroshima, Japan by Jun Ohtani

Slide 1

Slide 1

本当にその検索は 自分が想像している検索に なってますか? 2020/09/19 OSC Hiroshima Jun Ohtani / @johtani 1 — OSC Hiroshima 2020/09/19

Slide 2

Slide 2

自己紹介 ‣フリーランスエンジニア ‣検索技術勉強会主催者 ‣Apache Solr入門(第2版まで)や データ分析基盤構築入門の著者の一人 ‣KibanaのAnalyze API UI pluginの作者 2 — OSC Hiroshima 2020/09/19

Slide 3

Slide 3

今日話すこと ‣検索エンジンの仕組み ‣ Lucene/Elasticsearchの仕組み ‣検索システムに出てくる要素とか 3 — OSC Hiroshima 2020/09/19

Slide 4

Slide 4

話さないこと ‣個別の検索エンジン、検索サービスの使い方 ‣検索システムの運用 ‣画像検索、音声検索 4 — OSC Hiroshima 2020/09/19

Slide 5

Slide 5

アジェンダ ‣検索とは? ‣Grepと全文検索の違い ‣Lucene/Elasticsearchの仕組み ‣よりよい検索にするためには? 5 — OSC Hiroshima 2020/09/19

Slide 6

Slide 6

「Java」で検索したときに出 てきてほしいものは? 6 — OSC Hiroshima 2020/09/19

Slide 7

Slide 7

どっちが出てきてほしいですか? ‣あなたとJava、今すぐダウンロード ‣ JavaScriptという言葉は狭義にはMozillaが仕様を策 定し実装しているスクリプト言語を指す。 7 — OSC Hiroshima 2020/09/19

Slide 8

Slide 8

「Exception」で検索したと きに出てきてほしいものは? 8 — OSC Hiroshima 2020/09/19

Slide 9

Slide 9

どれが出てきてほしいですか? ‣java.lang.Exception ‣java.lang.IllegalArgumentException ‣java.io.FileNotFoundException 9 — OSC Hiroshima 2020/09/19

Slide 10

Slide 10

検索とは 検索とは、データの集合の中から 目的のデータを探し出すことである。 また、目的のデータが存在しないことの 確認行為も含まれる。 — Wikipediaより https://ja.wikipedia.org/wiki/ %E6%A4%9C%E7%B4%A2 10 — OSC Hiroshima 2020/09/19

Slide 11

Slide 11

どっちが出てきてほしいですか? ‣あなたとJava、今すぐダウンロード ‣ JavaScriptという言葉は狭義にはMozillaが仕様を策 定し実装しているスクリプト言語を指す。 11 — OSC Hiroshima 2020/09/19

Slide 12

Slide 12

どれが出てきてほしいですか? ‣java.lang.Exception ‣IllegalArgumentException ‣FileNotFoundException 12 — OSC Hiroshima 2020/09/19

Slide 13

Slide 13

検索ユースケース ‣図書館 ‣本 ‣Grep ‣Webサービス(Google,Yahoo!,Bingなどなど) 13 — OSC Hiroshima 2020/09/19

Slide 14

Slide 14

検索ユースケース - 図書館 14 — OSC Hiroshima 2020/09/19

Slide 15

Slide 15

検索ユースケース - 図書館 15 — OSC Hiroshima 2020/09/19

Slide 16

Slide 16

検索ユースケース - 本 16 — OSC Hiroshima 2020/09/19

Slide 17

Slide 17

検索ユースケース - Grep 17 — OSC Hiroshima 2020/09/19

Slide 18

Slide 18

検索ユースケース - Webサービス 18 — OSC Hiroshima 2020/09/19

Slide 19

Slide 19

検索の種類 ‣ディレクトリ型検索 ‣ キーワード検索 ‣音声検索 ‣画像検索 19 — OSC Hiroshima 2020/09/19

Slide 20

Slide 20

Grepと全文検索の違い ‣Grep ‣ 部分一致(文字一致) ‣全文検索 ‣ 転置インデックスを元に検索(詳しくは後述) 20 — OSC Hiroshima 2020/09/19

Slide 21

Slide 21

Grepと全文検索の違い - Grep 21 — OSC Hiroshima 2020/09/19

Slide 22

Slide 22

Grepと全文検索の違い - 全文検索 22 — OSC Hiroshima 2020/09/19

Slide 23

Slide 23

Lucene/Elasticsearchの仕組み - Index ‣1. ドキュメントの文字列を単語に分割 ‣ Text Analysis ‣2. 分割された単語で転置インデックス構築 ‣ Indexer / Inverted Index 23 — OSC Hiroshima 2020/09/19

Slide 24

Slide 24

Text Analysis - Elasticsearch ‣入力文字列を一定のルールに基づいて、単語列にして 出力する ‣Analyzerと呼ばれる仕組みにより実現 24 — OSC Hiroshima 2020/09/19

Slide 25

Slide 25

Text Analysis - English 25 — OSC Hiroshima 2020/09/19

Slide 26

Slide 26

Analyzer Architecture - Elasticsearch 26 — OSC Hiroshima 2020/09/19

Slide 27

Slide 27

Demo - Kibaan Analyze API UI plugin 27 — OSC Hiroshima 2020/09/19

Slide 28

Slide 28

Text Analysis - Japanese 28 — OSC Hiroshima 2020/09/19

Slide 29

Slide 29

Text Analysis - Japanese 29 — OSC Hiroshima 2020/09/19

Slide 30

Slide 30

Inverted Index - Elasticsearch 30 — OSC Hiroshima 2020/09/19

Slide 31

Slide 31

Lucene/Elasticsearchの仕組み - Query ‣1. クエリの文字列を単語に分割 ‣ Query Parser / Analyzer ‣2. 分割された単語で転置インデックス検索 ‣ Searcher / Inverted Index 31 — OSC Hiroshima 2020/09/19

Slide 32

Slide 32

Query Parser / Analyzer Elasticsearch 32 — OSC Hiroshima 2020/09/19

Slide 33

Slide 33

Inverted Index - Elasticsearch 33 — OSC Hiroshima 2020/09/19

Slide 34

Slide 34

Query Parser / Analyzer Elasticsearch 34 — OSC Hiroshima 2020/09/19

Slide 35

Slide 35

Query Parser / Analyzer Elasticsearch ‣デフォルトはOR検索 ‣ANDにも変更可能 35 — OSC Hiroshima 2020/09/19

Slide 36

Slide 36

Inverted Index - Elasticsearch 36 — OSC Hiroshima 2020/09/19

Slide 37

Slide 37

フレーズ(熟語)は? ‣「検索」「システム」と別れて出てくる ‣普通に検索すると、個別の単語として検索 37 — OSC Hiroshima 2020/09/19

Slide 38

Slide 38

Phrase Query - Elasticsearch 38 — OSC Hiroshima 2020/09/19

Slide 39

Slide 39

フレーズ検索 - Elasticsearch ‣単語の出現位置も考慮して結果を返す 39 — OSC Hiroshima 2020/09/19

Slide 40

Slide 40

正規表現?(前方一致とか) ^私は* できると思います? 40 — OSC Hiroshima 2020/09/19

Slide 41

Slide 41

正規表現? 41 — OSC Hiroshima 2020/09/19

Slide 42

Slide 42

Regexp Query - Elasticsearch ‣ElasticsearchにもRegexp Queryというものがある ‣これは、単語の一覧に対して正規表現で検索 42 — OSC Hiroshima 2020/09/19

Slide 43

Slide 43

Elasticsearchで部分一致は無理? ‣正規表現は無理ですが、部分一致は可能 ‣文字N-gramという考え方を使えば 43 — OSC Hiroshima 2020/09/19

Slide 44

Slide 44

Text Analysis - N-gram 44 — OSC Hiroshima 2020/09/19

Slide 45

Slide 45

Inverted Index - Elasticsearch 45 — OSC Hiroshima 2020/09/19

Slide 46

Slide 46

Query Parser / Analyzer Elasticsearch 46 — OSC Hiroshima 2020/09/19

Slide 47

Slide 47

検索エンジンの大きな仕事は2つ ‣1. 検索にヒットするものを探し出す ‣ ここまで説明してきた話 ‣2. 検索結果をスコアで並べ替えて結果を返す ‣ 今日はすこしだけ紹介 47 — OSC Hiroshima 2020/09/19

Slide 48

Slide 48

検索結果の並び順 ‣検索エンジンはスコアでソート可能 ‣もちろんスコア以外の項目でソートも可能 48 — OSC Hiroshima 2020/09/19

Slide 49

Slide 49

スコア? ‣どのくらいドキュメントがクエリに近いか? ‣ BM25 ‣ TF-IDF 49 — OSC Hiroshima 2020/09/19

Slide 50

Slide 50

その他の検索の機能 ‣ファセット - 絞り込みのヒントとして ‣Geo検索 - 位置検索 ‣ハイライト - どこがマッチした? ‣サジェスト - オートコンプリーション 50 — OSC Hiroshima 2020/09/19

Slide 51

Slide 51

よりよい検索にするためには? 検索エンジンだけでは対応できないことがいっぱい ‣UI/UX ‣検索ログ ‣検索結果の評価 51 — OSC Hiroshima 2020/09/19

Slide 52

Slide 52

検索システムでの選択肢 - ミドルウェア ‣RDB ‣Apache Solr / Elasticsearch ‣Groongaファミリー ‣etc. 52 — OSC Hiroshima 2020/09/19

Slide 53

Slide 53

検索システムでの選択肢 - SaaS ‣Algolia ‣Elastic Cloud App Search ‣Azure Cognitive Search ‣Amazon CloudSearch / etc. 53 — OSC Hiroshima 2020/09/19

Slide 54

Slide 54

まとめ ‣Grepと検索の仕組みの違い ‣仕組みをしることで何ができて何ができないかを理解 ‣ また、なにが問題でうまく動いてないかを把握 54 — OSC Hiroshima 2020/09/19

Slide 55

Slide 55

Thanks! @johtani 55 — OSC Hiroshima 2020/09/19

Slide 56

Slide 56

おすすめ本 https://booth.pm/ja/items/1865120 56 — OSC Hiroshima 2020/09/19

Slide 57

Slide 57

参考文献 ‣Elasticsearch: The Definitive Guide ‣Luceneのインデックスファイル構造 ‣Analyze API UI plugin 57 — OSC Hiroshima 2020/09/19