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

重要

スペル修正はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 Azure portal、プレビュー REST API からのみ利用できます。

個々の検索クエリ用語が検索エンジンに到達する前に修正することで、リコールを改善できます。 スペル チェック パラメーターは、simplefull、および現在パブリック プレビュー中の semantic オプションのすべての種類のクエリでサポートされています。

スペル チェックは、セマンティック検索プレビューと一緒にリリースされ、queryLanguage パラメーターを共有しますが、それ以外においては、独自の前提条件を持つ独立した機能です。 この機能を使用するためにサインアップを行う必要はなく、追加料金もかかりません。

前提条件

スペル チェックを使用するには、次が必要です。

  • Basic レベル以上の検索サービス (リージョンは問わず)。

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

  • "speller=lexicon"、および "queryLanguage" がサポートされている言語に設定されているクエリ要求。 スペル チェックは、"search" パラメーターで渡された文字列に対して機能します。 フィルターに対してはサポートされていません。

クエリ要求でプレビュー API をサポートする検索クライアントを使用します。 REST の場合、PostmanVisual Studio Code、または自分で変更したコードを使用して、プレビュー API への REST 呼び出しを行うことができます。 また、Azure SDK のベータ版リリースを使用することもできます。

クライアント ライブラリ バージョン
REST API 2021-04-30-Preview または 2020-06-30-Preview
Azure SDK for .NET バージョン 11.3.0-beta.2
Azure SDK for Java バージョン 11.4.0-beta.2
Azure SDK for JavaScript バージョン 11.2.0-beta.2
Azure SDK for Python バージョン 11.2.0b3

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

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30-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=2020-06-30-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=2020-06-30-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 リファレンス) からコピーされた以下の表に記載されています。

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

queryLanguage の考慮事項

他の場所で述べた通り、クエリ要求の queryLanguage パラメーターは 1 つしかありませんが、そのパラメーターは複数の機能で共有されており、それぞれが異なる言語コーホートをサポートしています。 スペル チェックのみを使用している場合は、上の表にあるサポートされている言語のリストが完全なリストです。

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

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

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

Cognitive Search で言語ライブラリを使用する方法を要約するには

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

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

クエリ要求では、queryLanguage に割り当てられた値がスペル チェック、回答、キャプションにも同様に適用されます。

Note

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

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

次のステップ