Cosmos DB でのフルテキスト インデックス作成と検索 (AzureとFabric) は、外部検索サービスを必要とせずにアプリのネイティブ検索機能を強化します。 この機能では、ステミング、単語の削除の停止、トークン化などの高度なテキスト処理手法を使用して、特殊なインデックスを介した効率的なテキスト検索を可能にします。
フルテキスト検索とは
Cosmos DB には、検索と取得のワークロードを強化するために設計されたフルテキスト インデックス作成と検索が用意されています。 この機能には、ステミング、単語の削除の停止、トークン化などの高度なテキスト処理手法が含まれており、特殊なテキスト インデックスを使用した効率的で効果的なテキスト検索が可能になります。 フルテキスト検索には、特定の検索クエリに対するドキュメントの関連性を評価する関数を使用した フルテキスト スコアリング も含まれます。 BM25 (Best Matching 25) では、用語の頻度、逆ドキュメントの頻度、ドキュメントの長さなどの要因を考慮して、ドキュメントのスコア付けとランク付けを行います。 これにより、最も関連性の高いドキュメントが検索結果の上位に表示されるようになり、テキスト検索の精度と有用性が向上します。
フルテキスト検索は、次のようなさまざまなシナリオに最適です。
E コマース: 説明、レビュー、その他のテキスト属性に基づいて製品をすばやく検索します。
コンテンツ管理: 記事、ブログ、ドキュメントを効率的に検索します。
カスタマー サポート: 関連するサポート チケット、FAQ、ナレッジ ベースの記事を取得します。
ユーザー コンテンツ: 投稿やコメントなどのユーザー作成コンテンツを分析して検索します。
チャットボットの RAG: 大規模なテキスト コーパスから関連情報を取得することでチャットボットの応答を強化し、回答の精度と関連性を向上させます。
マルチエージェント AI アプリ: 複数の AI エージェントが膨大な量のテキスト データを共同で検索および分析し、包括的で微妙な分析情報を提供できるようにします。
フルテキスト検索を使用する方法
フルテキスト ポリシーとフルテキスト インデックスを使用してコンテナーを構成します。
テキスト プロパティを使用してデータを挿入します。
フルテキスト検索システム関数を使用して、データに対してクエリを実行します。
ハイブリッド検索用にコンテナー ポリシーとインデックスを構成する
フルテキスト検索機能を使用するには、最初に 2 つのポリシーを定義する必要があります。
新しいフルテキスト クエリ システム関数のテキストを含むパスを定義するコンテナー レベルのフルテキスト ポリシー。
効率的な検索を可能にするインデックス作成ポリシーに追加されたフルテキスト インデックス。
これらのポリシーを使用せずにフルテキスト検索クエリを実行できますが、フルテキスト インデックスは使用されず、より多くの要求ユニット (RU) を使用する可能性があります。 このポリシーがないと、フルテキスト検索の実行に時間がかかる場合もあります。 フルテキスト コンテナーとインデックス ポリシーの定義をお勧めします。
フルテキスト ポリシー
フルテキスト検索用に構成するすべてのテキスト プロパティについて、プロパティの path とテキストの language の両方を宣言する必要があります。 単純なフルテキスト ポリシーは次のようになります。
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
複数のテキスト パスを定義するには、fullTextPolicy 配列に別の要素を追加します。
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text1",
"language": "en-US"
},
{
"path": "/text2",
"language": "en-US"
}
]
}
Important
ワイルドカード文字 (*、 []) は、現在、フルテキスト ポリシーまたはフルテキスト インデックスではサポートされていません。
フルテキスト ポリシーの設定の詳細と例については、 フルテキスト インデックス作成ポリシーのサンプルを参照してください。
複数言語のサポート
多言語サポートを使用すると、英語以外の言語でテキストのインデックスを作成したり検索したりできます。 より正確な検索結果を得るには、言語固有のトークン化、ステミング、ストップワードの削除が適用されます。
注
多言語サポートは早期プレビュー段階です。 検索のパフォーマンスと品質は、英語のフルテキスト検索とは異なる場合があります。 たとえば、ストップワードの削除は、現時点では英語 (en-us) でのみ使用できます。 この機能は、プレビューの進化によって変更される可能性があります。
次の言語がサポートされています。
| Language | Code | ストップワードの削除 |
|---|---|---|
| 英語 | en-US |
はい |
| ドイツ語 (プレビュー) | de-DE |
いいえ |
| フランス語 (プレビュー) | fr-FR |
いいえ |
| イタリア語 (プレビュー) | it-IT |
いいえ |
| ポルトガル語 - ブラジル (プレビュー) | pt-BR |
いいえ |
| ポルトガル語 - ポルトガル (プレビュー) | pt-PT |
いいえ |
| スペイン語 (プレビュー) | es-ES |
いいえ |
言語コードでは大文字と小文字が区別されます (たとえば、en-US は区別されますが、en-us は区別されません)。
フルテキスト インデックス
フルテキスト検索操作では、 フルテキスト インデックスを使用する必要があります。 次の例に従って、任意の Cosmos DB インデックス ポリシーでフルテキスト インデックスを簡単に定義できます。
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
],
"fullTextIndexes": [
{
"path": "/text"
}
]
}
フルテキスト ポリシーと同様に、フルテキスト インデックスは複数のパスで定義できます。
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
],
"fullTextIndexes": [
{
"path": "/text"
},
{
"path": "/text2"
}
]
}
フルテキスト検索クエリ
フルテキスト検索とスコア付け操作は、クエリ言語で次のシステム関数を使用して実行されます。
FULLTEXTCONTAINS: 指定した文字列がドキュメントの指定したプロパティに含まれている場合、trueを返します。 この関数は、クエリによって返されるドキュメントに特定のキーワードを確実に含める場合に、WHERE句で役立ちます。FULLTEXTCONTAINSALL: 指定した "すべて"trueの文字列がドキュメントの指定したプロパティに含まれている場合に を返します。 この関数は、クエリによって返されるドキュメントに複数のキーワードが含まれるようにする場合に、WHERE句で役立ちます。FULLTEXTCONTAINSANY: 指定した "いずれか"trueの文字列がドキュメントの指定したプロパティに含まれている場合に を返します。 この関数は、クエリによって返されるドキュメントに少なくとも 1 つのキーワードが含まれるようにする場合に、WHERE句で役立ちます。FULLTEXTSCORE: この関数をORDER BY RANK句で使用して、フルテキスト スコアで並べ替えられたドキュメントを返し、最も関連性の高い (最も高いスコアリング) ドキュメントを一番上に配置し、最も関連性の低い (最も低いスコアリング) を下部に配置します。
以下に、各関数の使用例をいくつか示します。
FULLTEXTCONTAINS
この例では、プロパティ c.textに "red bicycle" という語句が含まれている最初の 10 個の結果を取得します。
SELECT TOP 10
*
FROM
container c
WHERE
FULLTEXTCONTAINS(c.text, "red bicycle")
FULLTEXTCONTAINSALL
この例では、プロパティ c.textにキーワード "red" と "bicycle" が含まれている最初の 10 個の結果を取得しますが、必ずしも一緒に含まれているわけではありません。
SELECT TOP 10 *
FROM c
WHERE FULLTEXTCONTAINSALL(c.text, "red", "bicycle")
FULLTEXTCONTAINSANY
この例では、プロパティ c.textにキーワード "red" と "bicycle" または "skateboard" が含まれている最初の 10 個の結果を取得します。
SELECT TOP 10
*
FROM
container c
WHERE
FULLTEXTCONTAINS(c.text, "red") AND
FULLTEXTCONTAINSANY(c.text, "bicycle", "skateboard")
FULLTEXTSCORE
この例では、"mountain" と "bicycle" が含まれる最初の 10 個の結果を取得し、関連性の順序で並べ替えます。 つまり、これらの用語の出現頻度が高いドキュメントが、一覧の上位に表示されるはずです。
SELECT TOP 10
*
FROM
container c
ORDER BY RANK
FULLTEXTSCORE(c.text, "bicycle", "mountain")
Important
FULLTEXTSCORE は、 ORDER BY RANK 句でのみ使用でき、 SELECT ステートメントまたは WHERE 句には投影されません。
あいまい検索
あいまい検索を使用すると、入力ミスやテキストのバリエーションに対する回復性を向上させることができます。 検索語句とドキュメント テキストの間に許容される "距離" (編集回数) を指定して、ほぼ一致をヒットと見なすことができます。 指定できる最大距離は 2 (2 回編集) です。
注
あいまい検索は早期プレビュー段階です。 パフォーマンス、品質、および機能は、プレビューの進化によって変更される可能性があります。
SELECT TOP 10
*
FROM
container c
WHERE
FULLTEXTCONTAINS(c.text, {"term": "red", "distance":1}, {"term": "bicycle", "distance":2})