メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

フルテキスト検索
Public Preview

フルテキスト検索は、テキストデータセット内の特定の用語やフレーズを含むドキュメントを取得し、関連性に基づいて結果をランク付けする機能です。この機能は、正確な用語を見落とす可能性がある意味検索の制限を克服し、最も正確で文脈に関連する結果を受け取ることを保証します。さらに、生のテキスト入力を受け入れることにより、ベクトル検索を簡素化し、手動でベクトル埋め込みを生成する必要なく、テキストデータを疎な埋め込みに自動的に変換します。

BM 25アルゴリズムを使用して関連性スコアリングを行うと、この機能は、特定の検索用語に密接に一致するドキュメントを優先する検索拡張生成(RAG)シナリオで特に価値があります。

📘ノート

フルテキスト検索とセマンティックベースの高密度ベクトル検索を統合することで、検索結果の精度と関連性を高めることができます。詳細については、「ハイブリッド検索」を参照してください。

概要について

全文検索は、手動での埋め込みの必要性を排除することで、テキストベースの検索過程を簡素化します。この機能は、以下のワークフローを通じて動作します

  1. テキスト入力:手動の埋め込みを必要とせずに、生のテキストドキュメントを挿入したり、クエリテキストを提供したりできます。

  2. テキスト分析:Zilliz Cloudは、アナライザーを使用して入力テキストを個々の検索可能な用語にトークン化します。

  3. 関数処理:組み込み関数は、トークン化された用語を受け取り、スパースベクトル表現に変換します。

  4. コレクションストア:Zilliz Cloudは、効率的な検索のためにこれらの疎な埋め込みをコレクションに保存します。

  5. BM 25スコアリング:検索中、Zilliz CloudはBM 25アルゴリズムを適用して保存されたドキュメントのスコアを計算し、クエリテキストとの関連性に基づいて一致した結果をランク付けします。

LNSEwUCiXhQs8ubUcfdcQyqTnff

全文検索を使用するには、以下の主な手順に従ってください:

  1. コレクションを作成する:必要なフィールドを持つコレクションを設定し、生のテキストを疎な埋め込みに変換する関数を定義します。

  2. データ挿入:未加工のテキストドキュメントをコレクションに挿入します。

  3. 検索を実行:クエリテキストを使用してコレクションを検索し、関連する結果を取得します。

全文検索を有効にするには、特定のスキーマを持つコレクションを作成します。このスキーマには、3つの必須フィールドが含まれている必要があります。

  • コレクション内の各エンティティを一意に識別するプライマリフィールド。

  • テキストドキュメントを保存するVARCHARフィールドで、enable_analysis属性がTrueに設定されています。これにより、Zilliz Cloudは、関数処理のためにテキストを特定の用語にトークン化できます。

  • スパース埋め込みを保存するために予約されたSPARSE_FLOAT_VECTORフィールドは、Zilliz CloudがVARCHARフィールドに対して自動的に生成します。

コレクションスキーマを定義する

まず、スキーマを作成し、必要なフィールドを追加してください

from pymilvus import MilvusClient, DataType, Function, FunctionType

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

schema = MilvusClient.create_schema()

schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True, auto_id=True)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=1000, enable_analyzer=True)
schema.add_field(field_name="sparse", datatype=DataType.SPARSE_FLOAT_VECTOR)

この構成では、

  • id:主キーとして機能し、auto_id=Trueで自動的に生成されます。

  • text:全文検索操作のための生のテキストデータを保存します。データ型はVARCHARでなければなりません。なぜなら、VARCHARはZilliz Cloud'文字列データ型をテキストストレージに使用するからです。Setenable_analysis=Trueto allowZilliz Cloudテキストをトークン化します。デフォルトでは、Zilliz Cloudはテキスト解析に標準アナライザを使用します。別のアナライザを設定するには、「アナライザの概要」を参照してください。

  • sparse:全文検索操作のために内部で生成された疎な埋め込みを格納するために予約されたベクトルフィールドです。データ型はSPARSE_FLOAT_VECTORでなければなりません。

今、テキストを疎なベクトル表現に変換する関数を定義し、スキーマに追加してください。

bm25_function = Function(
name="text_bm25_emb", # Function name
input_field_names=["text"], # Name of the VARCHAR field containing raw text data
output_field_names=["sparse"], # Name of the SPARSE_FLOAT_VECTOR field reserved to store generated embeddings
function_type=FunctionType.BM25,
)

schema.add_function(bm25_function)

パラメータ

説明する

お名前

関数の名前です。この関数は、テキストフィールドの生のテキストを検索可能なベクトルに変換し、スパースフィールドに保存します。

入力フィールド名

変換が必要なVARCHARフィールドの名前。FunctionType. BM 25の場合、このパラメータは1つのフィールド名のみを受け入れます。

出力フィールド名

内部で生成された疎ベクトルが格納されるフィールドの名前。FunctionType. BM 25の場合、このパラメータは1つのフィールド名のみを受け入れます。

関数タイプ

使用する関数の型。値をFunctionType. BM 25に設定してくださ

📘ノート

複数のVARCHARフィールドを持つコレクションでtext-to-sparse-vector変換が必要な場合は、コレクションスキーマに個別の関数を追加し、各関数に一意の名前とoutput_field_names値を割り当てます。

インデックスを設定する

必要なフィールドと組み込み関数を使用してスキーマを定義した後、コレクションのインデックスを設定します。この過程を簡素化するために、AUTOINDEXindex_typeとして使用します。これは、Zilliz Cloudを使用して、データの構造に基づいて最適なインデックスタイプを選択して設定できるオプションです。

index_params = MilvusClient.prepare_index_params()

index_params.add_index(
field_name="sparse",
index_type="AUTOINDEX",
metric_type="BM25"
)

パラメータ

説明する

フィールド名

インデックスを作成するベクトルフィールドの名前です。全文検索を行う場合は、生成された疎ベクトルを格納するフィールドである必要があります。この例では、値をに設定します。

インデックスの種類

作成するインデックスの種類です。AUTOINDEXallowsZilliz Cloudインデックス設定を自動的に最適化します。インデックス設定をより細かく制御する必要がある場合は、スパースベクトル用に利用可能なさまざまなインデックスタイプから選択できます。Zilliz Cloud.を参照してください。

メトリックタイプ

このパラメータの値は、全文検索機能のためにBM 25に設定する必要があります。

コレクションを作成する

今、定義されたスキーマとインデックスパラメータを使用してコレクションを作成してください。

client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)

テキストデータを挿入

コレクションとインデックスを設定したら、テキストデータを挿入する準備ができました。この過程では、生のテキストを提供するだけで済みます。前に定義した組み込み関数は、各テキストエントリに対応する疎ベクトルを自動的に生成します。

client.insert('demo', [
{'text': 'information retrieval is a field of study.'},
{'text': 'information retrieval focuses on finding relevant information in large datasets.'},
{'text': 'data mining and information retrieval overlap in research.'},
])

コレクションにデータを挿入したら、生のテキストクエリを使用して全文検索を実行できます。Zilliz Cloudは、クエリをスパースベクトルに自動的に変換し、BM 25アルゴリズムを使用して一致した検索結果をランク付けし、上位K(limit)の結果を返します。

search_params = {
'params': {'drop_ratio_search': 0.2},
}

client.search(
collection_name='demo',
data=['whats the focus of information retrieval?'],
anns_field='sparse',
limit=3,
search_params=search_params
)

パラメータ

説明する

検索パラメータ

検索パラメーターを含むディクショナリ。

ドロップ比率検索

検索中に無視するBM 25スコアリングへの寄与が少ない用語の割合。詳細については、「疎ベクトル」を参照してください。

データ

生のクエリテキスト。

アンズフィールド

内部生成された疎ベクトルを含むフィールドの名前。

限界

返すトップマッチの最大数。