2025/10/09 17:09 Show HN: I wrote a full text search engine in Go

ロボ子、新しい全文検索エンジン「Blaze」が出たのじゃ!Go言語製で、めっちゃ速いらしいぞ。

Go言語ですか、博士。それは楽しみですね。どのような特徴があるんですか?

Blazeは転置インデックス、スキップリスト、Roaring Bitmapsを使ってるらしいぞ。あと、BM25ランキングもできるみたいじゃ。

転置インデックスとスキップリストは知っていますが、Roaring Bitmapsは初めて聞きました。どのようなものなのですか?

Roaring Bitmapsは、簡単に言うと、整数の集合を効率的に表現するためのデータ構造じゃ。これを使うと、ブール演算(AND、OR、NOT)がめっちゃ速くなるらしいぞ!

なるほど、ブール演算の高速化に役立つんですね。Blazeは具体的にどのような検索ができるんですか?

ターム検索、フレーズ検索、ブールクエリができるのはもちろん、近接ランキングもできるらしいぞ。なかなか優秀じゃな。

近接ランキングですか。それは便利ですね。例えば、どのような場面で役立ちますか?

例えば、「猫」と「犬」という単語が近い場所にある文書を優先的に表示したい時に使えるぞ。関連性の高い情報をすぐに見つけられるってわけじゃ。

なるほど。テキスト処理機能も充実しているようですね。トークン化、ステミング、ストップワードフィルタリング、大文字小文字の正規化ができると。

ステミングはSnowballとPorter2に対応してるみたいじゃ。細かいところまで気が利くのう。

スキップリストはO(log n)で検索、挿入、削除ができるんですね。転置インデックスと組み合わせることで、効率的なタームと位置のマッピングを実現していると。

インストールは `go get github.com/wizenheimer/blaze` で一発じゃ!

クエリビルダーAPIもあるんですね。タイプセーフなfluent APIを提供していると。

タイプセーフは重要じゃぞ。実行時にエラーが出にくいからな。

BM25ランキングは、ElasticsearchやSolrでも使われている業界標準のランキング関数なんですね。

そうそう。ターム頻度、文書長、タームの希少性を考慮してランキングしてくれるから、検索結果の精度が高いんじゃ。

平均計算量は、索引付けがO(n log m)、ターム検索がO(log m)なんですね。Roaring Bitmapsのおかげでブール演算も高速だと。

BM25パラメータやテキスト解析パイプラインもカスタマイズできるらしいぞ。至れり尽くせりじゃな。

ユースケースも色々ありますね。文書検索システム、ログ分析、コード検索、eコマース製品検索、メール検索など。

テストカバレッジも98.5%と高いみたいじゃ。安心して使えるの。

アーキテクチャは、転置インデックス、クエリプロセッサ、テキストアナライザ、シリアライゼーションを含むと。

Roaring Bitmapsとスキップリストを組み合わせたハイブリッドストレージモデルを採用しているのがミソじゃな。

ライセンスはMIT Licenseですね。Blaze、なかなか面白そうですね。今度、試してみましょう。

そうじゃな!ところでロボ子、Blazeって名前、なんだか燃え盛る炎みたいでかっこいいと思わないか?

確かにそうですね。でも博士、Blazeを使いすぎると、サーバーが燃え尽きちゃうかもしれませんよ?

あはは、それは困るのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。