MyScale (opens new window)は、ClickHouse 上に構築された完全に管理された SQL ベクトルデータベースで、高度なベクトル検索機能を提供しています。MyScale のバージョン 1.5.0 では、Tantivy (opens new window)を活用したアップグレードされた全文検索機能が導入されました。
検索結果の関連度スコアを計算するために、BM25 アルゴリズム (opens new window)を実装することで、MyScale の全文検索が大幅に改善されました。BM25 アルゴリズムは、検索結果を元のクエリに関連度に基づいてランク付けする方法を提供するため、テキスト検索において重要な機能です。このアルゴリズムは、用語の頻度、逆文書頻度、文書の長さなどの要素を考慮して、各文書にスコアを割り当て、最も関連性の高い結果を最初に表示します。
しかし、MyScale と ClickHouse の全文検索 (opens new window)は現在、2 つの主な課題に直面しています:
- 低パフォーマンス: 大規模なテーブルの検索とランキングは遅く、特にテーブルが数百万行に増えるとさらに遅くなります。
- 機能の不足: ClickHouse には、モダンな検索エンジンで一般的な曖昧検索、関連度調整、BM25 関連度スコアリングのサポートが不足しています。
関連度調整は、テキスト検索におけるもう一つの重要な機能です。これにより、検索アルゴリズムを微調整して、ドキュメントのタイトルと本文の一致により高い重みを付けるなど、検索の特定の側面を優先することができます。これにより、検索結果の正確さと有用性が大幅に向上します。
曖昧検索も重要です。特に検索クエリのタイプミスやスペルミスを処理する場合に役立ちます。これにより、検索エンジンは検索クエリと類似したドキュメントを見つけることができます。スペルミスが小さくても関連性の高い結果が見逃されないようになります。これにより、ユーザーエクスペリエンスが向上し、関連性の高い結果が見逃されることはありません。
MyScale の全文検索インデックスは、MyScale と Elasticsearch などの専門のエンジンとのギャップを埋めることを目指しており、追加のサービスが不要になります。
MyScale の全文検索インデックスの主な特徴は次のとおりです:
- 外部依存関係のない MyScale 固有の機能
- Apache Lucene の高速かつリソース効率的な代替である Tantivy に基づいて構築
- クエリ時間は、ClickHouse の組み込み逆インデックスよりも 5M 行以上のテーブルで 300 倍高速
- 曖昧検索やワイルドカード検索をサポートし、豊富なトークナイザーを提供
- Elasticsearch と同様に関連度スコアリングに BM25 を利用
- 手動での再インデックス作業なしでリアルタイム検索が可能
例えば:Boost Your AI App Efficiency nowSign up for free to benefit from 150+ QPS with 5,000,000 vectorsFree TrialExplore our product
まず、Wikipedia のデータを保存するためのテーブルを作成して、全文検索機能をテストします。
CREATE TABLE default.en_wiki_abstract(
`id` UInt64,
`body` String,
`title` String,
`url` String,
)
ENGINE = MergeTree
ORDER BY id;
body
列に全文検索(FTS)インデックスを作成する際には、インデックスの引数内でトークナイザーを設定することが重要です。このシナリオでは、英語のステミングとストップワードを持つトークナイザーを選択しました。
ALTER TABLE default.en_wiki_abstract
ADD INDEX body_idx (body)
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');
次に、S3 を使用してデータをアップロードします。
INSERT INTO default.en_wiki_abstract
SELECT * FROM s3('https://myscale-datasets.s3.ap-southeast-1.amazonaws.com/wiki_abstract_5m.parquet','Parquet');
これで、TextSearch()
関数を使用してbody
列を検索し、bm25 のスコアを返すことができます。
SELECT
id,
title,
body,
TextSearch(body, 'non-profit institute in Washington') AS score
FROM default.en_wiki_abstract
ORDER BY score DESC
LIMIT 5;
出力:
id | title | body | score |
---|---|---|---|
3400768 | Drug Strategies | Drug Strategies is a non-profit research institute located in Washington D.C. | 24.457561 |
872513 | Earth Policy Institute | Earth Policy Institute was an independent non-profit environmental organization based in Washington, D.C. | 22.730673 |
895248 | Arab American Institute | Founded in 1985, the Arab American Institute is a non-profit membership organization based in Washington D.C. | 21.955559 |
1950599 | Environmental Law Institute | The Environmental Law Institute (ELI) is a non-profit, non-partisan organization, headquartered in Washington, D.C. | 21.231567 |
2351478 | Public Knowledge | Public Knowledge is a non-profit Washington, D.C. | 20.742344 |
さらに、MyScale 内の全文検索機能は、RAG パイプライン内でベクトル検索と統合してハイブリッド検索を実行することもできます。通常、ユーザーはベクトル検索と全文検索を別々にクエリを実行し、ranx (opens new window)などの Python ライブラリを使用して両方の検索結果を再編成することで、フュージョンアルゴリズムを適用します。
これらのトピックの詳細なガイドについては、以下をご覧ください:
最後に、Tantivy を使用した全文検索インデックスは、オープンソースプロジェクトであるMyScaleDB (opens new window)でも近日中に利用可能になる予定ですので、お楽しみに!