本当にその検索は自分が想像している検索になってますか？
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