Azure AI Search のクエリにスペル チェックを追加する

重要

スペル修正はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 これは、Azure portal、プレビューの REST API、および Azure SDK ライブラリのベータ版を通じて利用できます。

検索エンジンに到達する前にクエリ内の単語のスペルを修正すると、リコールを向上させることができます。 speller パラメーターは、すべてのテキスト (非ベクトル) クエリの種類でサポートされています。

前提条件

  • 任意のリージョンの Basic レベル以上の検索サービス。

  • サポートされている言語のコンテンツを含む既存の検索インデックス。

  • speller=lexicon および queryLanguageサポートされている言語に設定されているクエリ要求。 スペル チェックは、search パラメーターで渡された文字列に対して機能します。 これは、フィルター、あいまい検索、ワイルドカード検索、正規表現、ベクトル クエリではサポートされていません。

クエリ要求でプレビュー API をサポートする検索クライアントを使用します。 REST クライアントまたは Azure SDK のベータ リリースを使用できます。

クライアント ライブラリ Versions
REST API バージョン 2020-06-30-Preview 以降。 最新のプレビュー API をお勧めします。 2024-05-01-preview
Azure SDK for .NET バージョン 11.5.0-beta.5
Azure SDK for Java バージョン 11.6.0-beta.5
Azure SDK for JavaScript バージョン 11.3.0-beta.8
Azure SDK for Python バージョン 11.4.0b3

次の例では、組み込みの hotels-sample インデックスを使用して、単純なテキスト クエリのスペル修正を示します。 スペル修正を行わない場合、クエリは 0 件の結果を返します。 修正すると、このクエリでは Johnson 家族向けリゾートについて 1 つの結果が返されます。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
    "search": "famly acitvites",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "queryType": "simple",
    "select": "HotelId,HotelName,Description,Category,Tags",
    "count": true
}

完全な Lucene でのスペル修正

スペル修正は、テキスト分析が行われる個々のクエリ用語に対して行われます。そのため、一部の Lucene クエリではスペル チェック パラメーターを使用できますが、それ以外では使用できません。

  • テキスト分析をバイパスする互換性のないクエリ形式には、ワイルドカード、正規表現、あいまいがあります
  • 互換性のあるクエリ形式には、フィールド検索、近接、用語ブーストがあります

この例では、完全な Lucene 構文とスペル ミスがあるクエリ用語を使用して、Category フィールドに対して検索を使用します。 スペル チェックを含めると、"Suiite" の入力ミスが修正され、クエリが成功します。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
    "search": "Category:(Resort and Spa) OR Category:Suiite",
    "queryType": "full",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "select": "Category",
    "count": true
}

セマンティックの順位付けでのスペル修正

このクエリでは、1 つを除くすべての用語に入力ミスがあるため、関連する結果を返すためのスペル修正が行われます。 詳細については、セマンティック ランカーの構成に関するページを参照してください。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview    
{
    "search": "hisotoric hotell wiht great restrant nad wiifi",
    "queryType": "semantic",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "searchFields": "HotelName,Tags,Description",
    "select": "HotelId,HotelName,Description,Category,Tags",
    "count": true
}

サポートされている言語

queryLanguage の有効な値は、サポートされている言語のリスト (REST API リファレンス) からコピーされた以下の表に記載されています。

言語 queryLanguage
英語 [EN] EN、EN-US (既定値)
スペイン語 [ES] ES、ES-ES (既定値)
フランス語 [FR] FR、FR-FR (既定値)
ドイツ語 [DE] DE、DE-DE (既定値)
オランダ語 [NL] NL、NL-BE、NL-NL (既定値)

Note

以前は、セマンティック ランカーはパブリック プレビュー段階でしたが、queryLanguage パラメーターはセマンティック ランク付けにも使用されていました。 セマンティック ランカーは現在、言語に依存していません。

言語アナライザーに関する考慮事項

英語以外のコンテンツを含むインデックスでは、英語以外のフィールドに対して言語アナライザーを使用して、ネイティブ言語の言語規則を適用することがよくあります。

言語分析も行われるコンテンツにスペル チェックを追加すると、インデックス作成とクエリ処理の各手順で同じ言語を使用して、より良い結果を得ることができます。 たとえば、"fr.microsoft" 言語アナライザーを使用してフィールドのコンテンツのインデックスが作成された場合、クエリとスペル チェックはすべて、何らかの形式のフランス語辞書または言語ライブラリを使用する必要があります。

Azure AI Search で言語ライブラリを使用する方法を要約すると:

  • 言語アナライザーは、インデックス作成とクエリの実行中に呼び出すことができ、Apache Lucene ("de.lucene" など) または Microsoft ("de.microsoft") のいずれかになります。

  • スペル チェック中に呼び出される言語辞書は、サポートされている言語の表に記載されているいずれかの言語コードを使用して指定されます。

クエリ要求では、queryLanguage に割り当てられた値が speller に適用されます。

Note

言語アナライザーを使用している場合は、さまざまなプロパティ値間の言語の一貫性だけが問題になります。 言語に依存しないアナライザー (keyword、simple、standard、stop、whitespace、standardasciifolding.lucene など) を使用している場合、queryLanguage 値は任意の値にすることができます。

検索インデックスのコンテンツは複数の言語で構成できますが、通常、クエリ入力は 1 つの言語で行われます。 検索エンジンでは、queryLanguage、言語アナライザー、コンテンツが構成されている言語の互換性が確認されません。そのため、誤った結果が生成されないように、適切にクエリのスコープを設定してください。

次のステップ