Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

検索エンジンことはじめ/First step towards full-text search...

convto
October 02, 2019

検索エンジンことはじめ/First step towards full-text search engine

全文検索エンジンについて調べたので社内LT会で話しました

convto

October 02, 2019
Tweet

More Decks by convto

Other Decks in Programming

Transcript

  1. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  2. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  3. たけのこ レシピ 驚きのたけの こ! ~~~~~~~~~~~ ~~~~~~~~~~~ レシピはこちら ~~~~~~~~~~~ 自炊術 ~~~~~~~~~~~

    ~~~~~~~~~~~ おすすめのたけのこ レシピも載せておきま す ~~~~~~~~~~~ n-gramについ て ~~~~~~~~~~~ ~~~~~~~~~~~ 一定の文字長でトー クナイズする ~~~~~~~~~~~ 驚きのたけの こ!, 自炊術
  4. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索
  5. ドキュメント内の単語リストを 単語が属するドキュメントリストに変換 Document id 単語リスト 1 おどろき, の, た けのこ,

    !, …略 2 自炊, 術, ...略 単語 Doc1 Doc2 おどろき ◦ × の ◦ ◦ たけのこ ◦ ◦ ! ◦ × 変換 例
  6. ドキュメント内の単語リストを 単語が属するドキュメントリストに変換 Document id 単語リスト 1 おどろき, の, た けのこ,

    !, …略 2 自炊, 術, ...略 単語 Doc1 Doc2 おどろき ◦ × の ◦ ◦ たけのこ ◦ ◦ ! ◦ × 変換 例 ポスティング
  7. ドキュメント内の単語リストを 単語が属するドキュメントリストに変換 Document id 単語リスト 1 おどろき, の, た けのこ,

    !, …略 2 自炊, 術, ...略 単語 Doc1 Doc2 おどろき ◦ × の ◦ ◦ たけのこ ◦ ◦ ! ◦ × 変換 例 ポスティングリスト
  8. ドキュメント内の単語リストを 単語が属するドキュメントリストに変換 Document id 単語リスト 1 おどろき, の, た けのこ,

    !, …略 2 自炊, 術, ...略 単語 Doc1 Doc2 おどろき ◦ × の ◦ ◦ たけのこ ◦ ◦ ! ◦ × 変換 例 転置リスト
  9. ドキュメント内の単語リストを 単語が属するドキュメントリストに変換 Document id 単語リスト 1 おどろき, の, た けのこ,

    !, …略 2 自炊, 術, ...略 単語 Doc1 Doc2 おどろき ◦ × の ◦ ◦ たけのこ ◦ ◦ ! ◦ × 変換 例 転置リストの情報を木構造などで 持たせて計算量を下げたものが 転置インデックス
  10. ドキュメント内の単語リストを 単語が属するドキュメントリストに変換 Document id 単語リスト 1 おどろき, の, た けのこ,

    !, …略 2 自炊, 術, ...略 単語 Doc1 Doc2 おどろき ◦, 1回, 1番目 × の ◦, 2回, 2,N番目 ◦, 3回, L,M,N 番目 たけのこ ◦, 1回, 3番目 ◦, 1回, N番目 ! ◦, 1回, N番目 × 変換 例 精度計算やフレーズ一致のためにメタ 情報を付与する場合もある
  11. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  12. n-gram メリデメ - メリット: 一文字ずつずらして単語わけするので、 検索もれがない - デメリット: 京都 と調べたときに

    東京都 も該当す る(東京、京都の2つの単語があるとみなされるた め) - デメリット: 単語数が多くなることがおおく、形態素 解析に比べて実行が遅くなる可能性が高い
  13. 形態素解析 メリデメ - メリット: n-gram に比べて実行が早い可能性が高 い - デメリット: 分けられ方によっては検索漏れが発生

    する場合がある(`たけのこ` が `たけ` `の` `こ` と 単語分けされて転置インデックスが構築された ケース、など)
  14. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  15. 検索エンジン向けの木 - B+ tree: B tree の派生で、ノードをファイルシステ ムのページサイズを意識して管理するのでスト レージデバイスとのI/O回数が減る -

    mysql デフォのストレージエンジンInnoDBはこ れ - BKD tree: まだ概要は把握していないが、色々な 検索エンジンで実績がある - ElasticSearch などはこれ
  16. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  17. 単語A 単語B 単語C 単語D ... 辞書 転置リスト 1, 1, 3,

    2, 1, 2 Doc id, 登場回数, 登場位置などの情報 が数値の列として保存される この例では 4byte * 6 = 一つのポスティ ングあたり 24byte
  18. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  19. マージして構築する方法 - 設定したメモリ上限に達するまでポスティングリス トを構築していく - メモリ上限に達したらファイルに描き下ろしてまた 次のポスティングリストを作る - 全件探索し終えたら部分的なポスティングリスト をマージして最終的なポスティングリストを得る

    マージのほうが読み書き回数少なくて 一般にはパフォーマンスがよい カーネルは投機読み込みや 遅延して読み取りマージなど ブロックデバイスのI/O補助があるため、 ソートでも問題ないケースもありそう
  20. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ
  21. もくじ - 全文検索エンジンとは - 転置インデックス - 非英語圏への対応: n-gram, 形態素解析 -

    辞書の実装で使われる木構造 - 転置リストの実装で考慮すること - インデックス構築 - 検索 - まとめ