Search Engine in Rust

Search Engine in Rust

Rust実装の検索エンジンについてまとめました。2019/07/16

F0493f5bcb4cc9fdccc54ae3e8ab6bd0?s=128

Kentaro Matsumoto

July 16, 2019
Tweet

Transcript

  1. Search Engine in Rust 2019/07/16 Shinjuku.rs #5 @FORCIA

  2. 松本健太郎/@matsu7874 • フォルシア株式会社 エンジニア • インメモリデータベースの開発 ◦ Rustを使用

  3. 目次 1. 全文検索エンジン 2. 全文検索エンジンライブラリTantivy

  4. Rust実装の全文検索エンジン

  5. Rustの全文検索エンジン Project Star Contributors Sonic 6887 19 Toshi 2184 14

    Rusticsearch 167 1 MeiliDB 133 6
  6. Sonic • RocksDBに依存 ◦ facebookが開発しているkey-value store • 商用利用実績あり!

  7. Toshi • Tantivyを使用 ◦ full-text search engine library • far

    from production ready
  8. Rusticsearch • RocksDBに依存 • 開発停止→toshiを見てね

  9. MeiliDB • RocksDBに依存 • meiliというフランスの会社が開発 • beta版でクライアントを探している?

  10. 全文検索エンジンライブラリ Tantivy

  11. Tantivy • 全文検索エンジンライブラリ ◦ Apache Lucene的な ◦ 高速な転置インデックスを提供する • 更新も出来るよ

    • @fulmicotonさん中心に開発
  12. なんで速いの? • FSTで辞書引き ◦ 有限状態トランスデューサー • delta-encoding ◦ 前の要素との差分を保存する •

    bit pack ◦ 5とか7とかは3bitでよくね? ◦ メモリに載るぜ!
  13. インデックス構造 • WORM: write-one-read-many • segmentという小単位で保存 ◦ これは上書きしない

  14. 更新もできるの? • add_document, delete_term • 処理はQueueに貯めていく ◦ QueueはRwLock

  15. once_cell::sync::Lazy; • 1回与えられたら、更新されない

  16. Tutorialが簡単 • 500万行8GBのWikipediaデータ • 4並列でindex `-t`オプション • 10分くらいでインデックスできる

  17. Exampleが充実 • custom_tokenizer • custom_collector • update • stop_words

  18. 実装が見やすい • 読むべし