Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Search Engine in Rust 2019/07/16 Shinjuku.rs #5 @FORCIA
Slide 2
Slide 2 text
松本健太郎/@matsu7874 ● フォルシア株式会社 エンジニア ● インメモリデータベースの開発 ○ Rustを使用
Slide 3
Slide 3 text
目次 1. 全文検索エンジン 2. 全文検索エンジンライブラリTantivy
Slide 4
Slide 4 text
Rust実装の全文検索エンジン
Slide 5
Slide 5 text
Rustの全文検索エンジン Project Star Contributors Sonic 6887 19 Toshi 2184 14 Rusticsearch 167 1 MeiliDB 133 6
Slide 6
Slide 6 text
Sonic ● RocksDBに依存 ○ facebookが開発しているkey-value store ● 商用利用実績あり!
Slide 7
Slide 7 text
Toshi ● Tantivyを使用 ○ full-text search engine library ● far from production ready
Slide 8
Slide 8 text
Rusticsearch ● RocksDBに依存 ● 開発停止→toshiを見てね
Slide 9
Slide 9 text
MeiliDB ● RocksDBに依存 ● meiliというフランスの会社が開発 ● beta版でクライアントを探している?
Slide 10
Slide 10 text
全文検索エンジンライブラリ Tantivy
Slide 11
Slide 11 text
Tantivy ● 全文検索エンジンライブラリ ○ Apache Lucene的な ○ 高速な転置インデックスを提供する ● 更新も出来るよ ● @fulmicotonさん中心に開発
Slide 12
Slide 12 text
なんで速いの? ● FSTで辞書引き ○ 有限状態トランスデューサー ● delta-encoding ○ 前の要素との差分を保存する ● bit pack ○ 5とか7とかは3bitでよくね? ○ メモリに載るぜ!
Slide 13
Slide 13 text
インデックス構造 ● WORM: write-one-read-many ● segmentという小単位で保存 ○ これは上書きしない
Slide 14
Slide 14 text
更新もできるの? ● add_document, delete_term ● 処理はQueueに貯めていく ○ QueueはRwLock
Slide 15
Slide 15 text
once_cell::sync::Lazy; ● 1回与えられたら、更新されない
Slide 16
Slide 16 text
Tutorialが簡単 ● 500万行8GBのWikipediaデータ ● 4並列でindex `-t`オプション ● 10分くらいでインデックスできる
Slide 17
Slide 17 text
Exampleが充実 ● custom_tokenizer ● custom_collector ● update ● stop_words
Slide 18
Slide 18 text
実装が見やすい ● 読むべし