次の方法で共有


Azure Cosmos DB for NoSQL でのフルテキスト検索

重要

この機能のサポートはグローバルにロールアウトされており、すべての Azure パブリック リージョンではまだ完全には利用できない場合があります。

Azure Cosmos DB for NoSQL では、一般提供されている強力なフルテキスト検索機能が提供されるようになりました。 これは、基本的なフルテキスト検索用の外部検索サービスを必要とせずに、アプリのネイティブ検索機能を強化するように設計されています。

[前提条件]

  • Azure Cosmos DB for NoSQL アカウント

Azure Cosmos DB for NoSQL では、データ クエリ機能を強化するように設計されたフルテキスト インデックス作成と検索が提供されるようになりました。 この機能には、ステミング、ストップ ワードの削除、トークン化などの高度なテキスト処理手法が含まれているため、専用のテキスト インデックスを使用した効率的かつ効果的なテキスト検索が可能になります。 フルテキスト検索には、指定の検索クエリに対するドキュメントの関連性を評価する機能である全文スコアリングも含まれています。 BM25 (Best Matching 25) では、用語の出現頻度、逆文書頻度、ドキュメントの長さなどの要因を考慮して、ドキュメントのスコア付けとランク付けを行います。 これにより、最も関連性の高いドキュメントが検索結果の上位に表示されるようになり、テキスト検索の精度と有用性が向上します。

フルテキスト検索は、次のようなさまざまなシナリオに最適です。

  • E コマース: 説明、レビュー、その他のテキスト属性に基づいて製品をすばやく検索します。
  • コンテンツ管理: 記事、ブログ、ドキュメントを効率的に検索します。
  • カスタマー サポート: 関連するサポート チケット、FAQ、ナレッジ ベースの記事を取得します。
  • ユーザー コンテンツ: 投稿やコメントなどのユーザー作成コンテンツを分析して検索します。
  • チャットボットの RAG: 大規模なテキスト コーパスから関連情報を取得することでチャットボットの応答を強化し、回答の精度と関連性を向上させます。
  • マルチエージェント AI アプリ: 複数の AI エージェントを連携させて膨大なテキスト データを検索、分析することで、包括的で繊細なインサイトを提供します。
  1. フルテキスト ポリシーとフルテキスト インデックスが有効なコンテナーを構成します。
  2. テキスト プロパティを使用してデータを挿入します。
  3. データに対してハイブリッド クエリを実行します。

フルテキスト検索機能を使用するには、最初に次の 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"
       }
   ]
}

重要

ワイルドカード文字 (*、[]) は、現時点ではフルテキスト ポリシーまたはフルテキスト インデックスではサポートされていません。

複数言語のサポート (プレビュー)

多言語サポートを使用すると、英語以外の言語でテキストのインデックスを作成したり検索したりできます。 より正確な検索結果を得るには、言語固有のトークン化、ステミング、ストップワードの削除が適用されます。

多言語サポートは早期プレビュー段階です。 検索のパフォーマンスと品質は、英語のフルテキスト検索とは異なる場合があります。 たとえば、ストップワードの削除は、現時点では英語 (en-us) でのみ使用できます。 この機能は、プレビューの進化によって変更される可能性があります。 試すには、Azure portal の Azure Cosmos DB リソースの [機能] セクションを使用して、 フルテキスト検索機能のプレビュー 機能に登録する必要があります。

現在サポートされている言語は次のとおりです。

  • en-US (英語)
  • de-DE (ドイツ語)
  • es-ES (スペイン語)
  • fr-FR (フランス語)

フルテキスト インデックス

フルテキスト検索操作では、フル テキスト インデックスを活用することをお勧めします。 フルテキスト インデックスは、以下の例のように、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に "red bicycle" という語句が含まれている最初の 10 個の結果を取得します。

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red bicycle")

フルテキストコンテインズオール

この例では、プロパティ 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")

フルテキストスコア

この例では、"mountain" と "bicycle" が含まれる最初の 10 件の結果を取得し、関連性の順序で並べ替えます。 つまり、これらの用語の出現頻度が高いドキュメントが、一覧の上位に表示されるはずです。

SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, "bicycle", "mountain")

重要

FullTextScore は ORDER BY RANK 句でのみ使用でき、SELECT ステートメントまたは WHERE 句には投影されません。

あいまい検索 (プレビュー)

あいまい検索を使用すると、入力ミスやテキストのバリエーションに対する回復性を向上させることができます。 検索語句とドキュメント テキストの間に許容される "距離" (編集回数) を指定して、ほぼ一致をヒットと見なすことができます。 指定できる最大距離は 2 (2 回編集) です。

あいまい検索は早期プレビュー段階です。 パフォーマンス、品質、および機能は、プレビューの進化によって変更される可能性があります。 試すには、Azure portal の Azure Cosmos DB リソースの [機能] セクションを使用して、 フルテキスト検索機能のプレビュー 機能に登録する必要があります。

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, {"term": "red", "distance":1}, {"term": "bicycle", "distance":2})