Rustで書いた全文検索の極薄ラッパーライブラリを公開した

TECH
当サイトには広告・アフィリエイトリンクが含まれる場合があります。

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.

コメント

タイトルとURLをコピーしました