Azure Cosmos DB for NoSQL におけるフルテキスト検索 (プレビュー)
Azure Cosmos DB for NoSQL では、アプリケーションの検索機能を向上させるように設計された、強力なフルテキスト検索機能がプレビューとして利用できるようになりました。
Note
フル テキストおよびハイブリッド検索は早期プレビュー段階であり、現時点では一部のリージョンでは利用できない場合があります。
フルテキスト検索とは
Azure Cosmos DB for NoSQL では、データのクエリ機能を向上させるように設計された、強力なフルテキスト検索機能がプレビューとして利用できるようになりました。 この機能には、ステミング、ストップ ワードの削除、トークン化などの高度なテキスト処理手法が含まれているため、専用のテキスト インデックスを使用した効率的かつ効果的なテキスト検索が可能になります。 フルテキスト検索には、指定の検索クエリに対するドキュメントの関連性を評価する機能である全文スコアリングも含まれています。 BM25 (Best Matching 25) では、用語の出現頻度、逆文書頻度、ドキュメントの長さなどの要因を考慮して、ドキュメントのスコア付けとランク付けを行います。 これにより、最も関連性の高いドキュメントが検索結果の上位に表示されるようになり、テキスト検索の精度と有用性が向上します。
フルテキスト検索は、次のようなさまざまなシナリオに最適です。
- E コマース: 説明、レビュー、その他のテキスト属性に基づいて製品をすばやく検索します。
- コンテンツ管理: 記事、ブログ、ドキュメントを効率的に検索します。
- カスタマー サポート: 関連するサポート チケット、FAQ、ナレッジ ベースの記事を取得します。
- ユーザー コンテンツ: 投稿やコメントなど、ユーザー作成コンテンツを分析して検索します。
- チャットボットの RAG: 大規模なテキスト コーパスから関連情報を取得することでチャットボットの応答を強化し、回答の精度と関連性を向上させます。
- マルチエージェント AI アプリ: 複数の AI エージェントを連携させて膨大なテキスト データを検索、分析することで、包括的で繊細なインサイトを提供します。
フルテキスト検索を使用する方法
Note
現時点では、フル テキストおよびハイブリッド検索 (プレビュー) は一部のリージョンで使用できない場合があります。
- "NoSQL のフル テキストおよびハイブリッド検索" プレビュー機能を有効にします。
- フルテキスト ポリシーとフルテキスト インデックスが有効なコンテナーを構成します。
- テキスト プロパティを使用してデータを挿入します。
- データに対してハイブリッド クエリを実行します。
NoSQL プレビュー機能のフルテキスト検索とハイブリッド検索を有効にする
フルテキスト検索、フルテキスト スコアリング、ハイブリッド検索のいずれの場合も、これらを使用するにはあらかじめ Azure Cosmos DB for NoSQL アカウントでプレビュー機能を有効にする必要があります。 次の手順で登録します。
- Azure Cosmos DB for NoSQL リソース ページに移動します。
- [設定] メニュー項目の [機能] ウィンドウを選択します。
- [NoSQL API のフルテキスト検索およびハイブリッド検索 (プレビュー)] 機能を選択します。
- 機能の説明を読み、有効にすることを確認します。
- [有効] を選択して、ベクトル インデックス作成と検索機能を有効にします。
ハイブリッド検索用にコンテナー ポリシーとインデックスを構成する
フルテキスト検索機能を使用するには、最初に以下の 2 つのポリシーを定義する必要があります。
- 新しいフルテキスト クエリ システム機能のテキストを含むパスを定義する、コンテナー レベルのフルテキスト ポリシー。
- 効率的な検索を可能にするインデックス作成ポリシーに追加されたフルテキスト インデックス。
フルテキスト ポリシー
フルテキスト検索用に構成するすべてのテキスト プロパティについて、テキストを含むプロパティの 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"
}
]
}
Note
現時点では、サポートされている言語は英語 (言語が "en-us" に指定されているもの) のみです。
重要
ワイルドカード文字 (*、[]) は、現時点ではフルテキスト ポリシーまたはフルテキスト インデックスではサポートされていません。
フルテキスト インデックス
フルテキスト検索操作では、フル テキスト インデックスを活用することをお勧めします。 フルテキスト インデックスは、以下の例のように、Azure Cosmos DB for NoSQL インデックス ポリシーで簡単に定義できます。
{
"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"
}
]
}
フルテキスト検索クエリ
フルテキスト検索とスコアリング操作は、Azure Cosmos DB for NoSQL クエリ言語の次のシステム関数を使用して実行されます。
FullTextContains
: 指定した文字列がドキュメントの指定したプロパティに含まれている場合、true
を返します。 これはWHERE
句において、特定のキーワードが含まれているドキュメントをクエリで返したい場合に便利です。FullTextContainsAll
: 指定した "すべて" の文字列がドキュメントの指定したプロパティに含まれている場合にtrue
を返します。 これはWHERE
句において、複数のキーワードが含まれているドキュメントをクエリで返したい場合に便利です。FullTextContainsAny
: 指定した "いずれか" の文字列がドキュメントの指定したプロパティに含まれている場合にtrue
を返します。 これはWHERE
句において、少なくとも 1 つのキーワードが含まれているドキュメントをクエリで返したい場合に便利です。FullTextScore
: スコアを返します。 これは、ORDER BY RANK
句でのみ使用できます。返されるドキュメントはフルテキスト スコアのランクで並べ替えられ、最も関連性の高い (最もスコアの高い) ドキュメントが一番上に、最も関連性の低い (最もスコアの低い) ドキュメントが下部に表示されます。
以下に、各関数の使用例をいくつか示します。
FullTextContains
この例では、プロパティ c.text
にキーワード "bicycle" が含まれる最初の 10 件の結果を取得します。
SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "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 c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")
FullTextScore
この例では、"mountain" と "bicycle" が含まれる最初の 10 件の結果を取得し、関連性の順序で並べ替えます。 つまり、これらの用語の出現頻度が高いドキュメントが、一覧の上位に表示されるはずです。
SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, ["bicycle", "mountain"])
重要
FullTextScore は ORDER BY RANK
句でのみ使用でき、SELECT
ステートメントまたは WHERE
句には投影されません。