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
、言語アナライザー、コンテンツが構成されている言語の互換性が確認されません。そのため、誤った結果が生成されないように、適切にクエリのスコープを設定してください。