TauriというフロントエンドにWeb技術、アプリケーションロジックにRustを採用したマルチプラットフォーム開発フレームワークを使って、めちゃくちゃ久しぶりに個人開発をしてみているのですが、その過程で全文検索機能が欲しくなったのでした。
ちょっと探すと、Rustではtantivyという全文検索エンジンのクレート(ライブラリみたいなものだと思ってる)がデファクトスタンダードのようであり、日本語検索をするにはこれにlinderaという形態素解析ライブラリ(クレート)を組み合わせるのが一般的らしい。
もちろんこれらを有り難く使わせてもらうのですが、けっきょく自作のアプリに組み込む際に、必要な機能だけを便利に使えるようにするラッパーレイヤーを作ることになるわけです。
すでにあるものを組み合わせて自分が使いやすいようにするのが「ハック」の真髄なら、(もしそれが便利なものになるのなら)成果物を公開するのが「オープンソース」の心というものではないだろうか。
ということで、先週、最初の版をcargo publishしました。
traverze – crates.io: Rust Package Registry
traverze v0.1.0の特徴
- ファイルを指定してインデクシングする
- インデクシングしたファイルの全文検索ができる
- 日本語形態素解析(lindera)を使用するかどうかはインストール時に決める
- 使用時は辞書がバイナリに埋め込まれる(使用しないときは埋め込まれない)
- 形態素解析を使わなくてもN-gramで分割するので(インデックスファイルは少し大きくなるけど)全文検索自体は可能
- ライブラリとしてもCLI(Command Line Interface)としても機能する
ちなみに、traverzeというネーミング。本当は「全文検索」から想起したtraverseという名前にしたかったのですが、すでに使われていたためtraverzeにしました。趣味のスノーボードや登山においても「トラバース」は馴染みのある単語だったため、なかなか悔しい。
インストール
cargoがインストールされている環境であれば、以下でインストールできます。
$ cargo install traverze
日本語形態素解析(とIPADIC辞書)を使う場合は、以下でインストールできます。
$ cargo install traverze --features tokenizer-lindera-ipadic
CLIの使い方
index │ ファイルのインデクシング
まず、(テキスト)ファイルをインデクシングする必要があります。
$ traverze index <FILES...>
複数のファイルを渡すことができます。
search │ 全文検索
検索キーワードを渡すと、ヒットした場合、そのスコアとファイルパスが出力されます。
$ traverze search <QUERY>
もう少し詳細をREADMEに載せたと思います。
ライブラリの使い方
ライブラリの使い方と言っていいのか、Rustなのでクレートの使い方と言うべきなのかよく分かりませんが、ここでは割愛します。本来、ちゃんとドキュメントになるべきなんですけど、すまんな、書いてない。
GitHubリポジトリ
GitHubのリポジトリもひさびさにpublicにしました。こちらになります。
GitHub – kyow/traverze: A utility library and CLI for full-text search built on Tantivy and Lindera.


コメント