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

実装が見やすい ● 読むべし