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

A presentation at JJUGナイトセミナー in March 2020 in Tokyo, Japan by Jun Ohtani

Slide 1

Slide 1

本当にその検索は 自分が想像している検索になっ てますか? 2020/02/18 JJUGナイトセミナー Jun Ohtani @johtan 1 — JJUG Night Seminar 20200218

Slide 2

Slide 2

自己紹介 ▸ フリーランスエンジニア(仮) ▸ Apache Solr入門(第2版まで)やデータ分析 基盤構築入門の著者の一人 ▸ KibanaのAnalyze API UI pluginの作者 2 — JJUG Night Seminar 20200218

Slide 3

Slide 3

今日話すこと ▸ 検索エンジンの仕組み ▸ Lucene/Elasticsearchの仕組み ▸ 検索システムに出てくる要素とか 3 — JJUG Night Seminar 20200218

Slide 4

Slide 4

話さないこと ▸ 個別の検索エンジン、検索サービスの使 い方 ▸ 検索システムの運用 ▸ 画像検索、音声検索 4 — JJUG Night Seminar 20200218

Slide 5

Slide 5

アジェンダ ▸ 検索とは? ▸ Grepと全文検索の違い ▸ Lucene/Elasticsearchの仕組み ▸ よりよい検索にするためには? 5 — JJUG Night Seminar 20200218

Slide 6

Slide 6

「Java」で検索したときに出 てきてほしいものは? 6 — JJUG Night Seminar 20200218

Slide 7

Slide 7

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

Slide 8

Slide 8

「Exception」で検索したと きに出てきてほしいものは? 8 — JJUG Night Seminar 20200218

Slide 9

Slide 9

どれが出てきてほしいですか? ▸ java.lang.Exception ▸ java.lang.IllegalArgumentException ▸ java.io.FileNotFoundException 9 — JJUG Night Seminar 20200218

Slide 10

Slide 10

検索とは 検索とは、データの集合の中から目的の データを探し出すことである。 また、目的のデータが存在しないことの 確認行為も含まれる。 Wikipediaより https://ja.wikipedia.org/wiki/ 10 — JJUG Night Seminar 20200218

Slide 11

Slide 11

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

Slide 12

Slide 12

どれが出てきてほしいですか? ▸ java.lang.Exception ▸ IllegalArgumentException ▸ FileNotFoundException 12 — JJUG Night Seminar 20200218

Slide 13

Slide 13

検索ユースケース ▸ 図書館 ▸ 本 ▸ Grep ▸ Webサービス(Google,Yahoo!,Bingなどな 13 — JJUG Night Seminar 20200218

Slide 14

Slide 14

検索ユースケース - 図書館 14 — JJUG Night Seminar 20200218

Slide 15

Slide 15

検索ユースケース - 図書館 15 — JJUG Night Seminar 20200218

Slide 16

Slide 16

検索ユースケース - 本 16 — JJUG Night Seminar 20200218

Slide 17

Slide 17

検索ユースケース - Grep 17 — JJUG Night Seminar 20200218

Slide 18

Slide 18

検索ユースケース - Webサービス 18 — JJUG Night Seminar 20200218

Slide 19

Slide 19

検索の種類 ▸ ディレクトリ型検索 ▸ キーワード検索 ▸ 音声検索 ▸ 画像検索 19 — JJUG Night Seminar 20200218

Slide 20

Slide 20

Grepと全文検索の違い ▸ Grep - 部分一致(文字一致) ▸ 全文検索 - 転置インデックスを元に検索 (詳しくは後述) 20 — JJUG Night Seminar 20200218

Slide 21

Slide 21

Grepと全文検索の違い - Grep 21 — JJUG Night Seminar 20200218

Slide 22

Slide 22

Grepと全文検索の違い - 全文検索 22 — JJUG Night Seminar 20200218

Slide 23

Slide 23

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

Slide 24

Slide 24

Text Analysis - Elasticsearch ▸ 入力文字列を一定のルールに基づいて、 単語列にして出力する ▸ Analyzerと呼ばれる仕組みにより実現 24 — JJUG Night Seminar 20200218

Slide 25

Slide 25

Text Analysis - English 25 — JJUG Night Seminar 20200218

Slide 26

Slide 26

Analyzer Architecture - Elasticsearch 26 — JJUG Night Seminar 20200218

Slide 27

Slide 27

Demo - Kibaan Analyze API UI plugin 27 — JJUG Night Seminar 20200218

Slide 28

Slide 28

Text Analysis - Japanese 28 — JJUG Night Seminar 20200218

Slide 29

Slide 29

Text Analysis - Japanese 29 — JJUG Night Seminar 20200218

Slide 30

Slide 30

Inverted Index - Elasticsearch 30 — JJUG Night Seminar 20200218

Slide 31

Slide 31

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

Slide 32

Slide 32

Query Parser / Analyzer - Elasticsearch 32 — JJUG Night Seminar 20200218

Slide 33

Slide 33

Inverted Index - Elasticsearch 33 — JJUG Night Seminar 20200218

Slide 34

Slide 34

Query Parser / Analyzer - Elasticsearch 34 — JJUG Night Seminar 20200218

Slide 35

Slide 35

Query Parser / Analyzer - Elasticsearch ▸ デフォルトはOR検索 ▸ ANDにも変更可能 35 — JJUG Night Seminar 20200218

Slide 36

Slide 36

Inverted Index - Elasticsearch 36 — JJUG Night Seminar 20200218

Slide 37

Slide 37

フレーズ(熟語)は? ▸ 「検索」「システム」と別れて出てくる ▸ 普通に検索すると、個別の単語として検 索 37 — JJUG Night Seminar 20200218

Slide 38

Slide 38

Phrase Query - Elasticsearch 38 — JJUG Night Seminar 20200218

Slide 39

Slide 39

フレーズ検索 - Elasticsearch ▸ 単語の出現位置も考慮して結果を返す 39 — JJUG Night Seminar 20200218

Slide 40

Slide 40

正規表現?(前方一致とか) ^私は* できると思います? 40 — JJUG Night Seminar 20200218

Slide 41

Slide 41

正規表現? 41 — JJUG Night Seminar 20200218

Slide 42

Slide 42

Regexp Query - Elasticsearch ▸ ElasticsearchにもRegexp Queryというも のがある ▸ これは、単語の一覧に対して正規表現で 検索 42 — JJUG Night Seminar 20200218

Slide 43

Slide 43

検索結果の並び順 ▸ 検索エンジンはスコアでソート可能 ▸ もちろんスコア以外の項目でソートも可 能 43 — JJUG Night Seminar 20200218

Slide 44

Slide 44

スコア? ▸ BM25 ▸ TF-IDF 44 — JJUG Night Seminar 20200218

Slide 45

Slide 45

その他の検索の機能 ▸ ファセット - 絞り込みのヒントとして ▸ Geo検索 - 位置検索 ▸ ハイライト - どこがマッチした? ▸ サジェスト - オートコンプリーション 45 — JJUG Night Seminar 20200218

Slide 46

Slide 46

よりよい検索にするためには? 検索エンジンだけでは対応できないことが いっぱい ▸ UI/UX ▸ 検索ログ ▸ 検索結果の評価 46 — JJUG Night Seminar 20200218

Slide 47

Slide 47

検索システムでの選択肢 - ミドルウェ ア ▸ RDB ▸ Apache Solr / Elasticsearch ▸ Groongaファミリー ▸ etc. 47 — JJUG Night Seminar 20200218

Slide 48

Slide 48

検索システムでの選択肢 - SaaS ▸ Algolia ▸ Elastic Cloud App Search ▸ Azure Cognitive Search ▸ Amazon CloudSearch / etc. 48 — JJUG Night Seminar 20200218

Slide 49

Slide 49

まとめ ▸ Grepと検索の仕組みの違い ▸ 仕組みをしることで何ができて何ができ ないかを理解 ▸ また、なにが問題でうまく動いてない 49 — JJUG Night Seminar 20200218

Slide 50

Slide 50

Thanks! @johtani 50 — JJUG Night Seminar 20200218

Slide 51

Slide 51

おすすめ本 https://booth.pm/ja/items/1865120 51 — JJUG Night Seminar 20200218

Slide 52

Slide 52

参考文献 ▸ Elasticsearch: The Definitive Guide ▸ Luceneのインデックスファイル構造 ▸ Analyze API UI plugin 52 — JJUG Night Seminar 20200218

Slide 53

Slide 53

[WIP] ほかにも書い ていきたいこと 53 — JJUG Night Seminar 20200218

Slide 54

Slide 54

Elasticsearchの検索のフェーズの話 ▸ QueryフェーズとFetchフェーズ ▸ dfs ▸ Aggsとの関係 54 — JJUG Night Seminar 20200218

Slide 55

Slide 55

転置インデックス詳細 ▸ term dictionary ▸ postings list 55 — JJUG Night Seminar 20200218

Slide 56

Slide 56

スコアの詳細? ▸ 式とか? ▸ Script Scoreとか 56 — JJUG Night Seminar 20200218

Slide 57

Slide 57

57 — JJUG Night Seminar 20200218