Azure AI 検索で類義語を追加する
検索サービスでは、シノニム マップによって同等の用語が関連付けられ、ユーザーが実際に用語を指定しなくてもクエリのスコープが拡張されます。 たとえば、dog (犬)、canine (イヌ科)、puppy (子犬) がマップされた類義語であると仮定すると、canine に対するクエリは、dog を含むドキュメントで一致します。 英語版やフランス語版など、言語によって別々のシノニム マップを複数作成したり、コンテンツに技術的な専門用語、スラング、またはあいまいな用語が含まれている場合は、辞書を作成したりすることができます。
シノニム マップに関するいくつかの重要なポイント:
- シノニム マップは、一度作成すると多数のインデックスで使用できる最上位のリソースです。
- シノニム マップは、文字列フィールドに適用されます。
- シノニム マップは、インデックス作成やクエリを中断することなく、いつでも作成して割り当てることができます。
- ご利用のサービス レベルによって、作成できるシノニム マップの数に制限が設定されます。
- 検索サービスには複数のシノニム マップを含めることができますが、インデックス内では、フィールド定義に割り当てることができるシノニム マップは 1 つだけです。
シノニム マップの作成
シノニム マップは、シノニム マップ エントリとして機能する名前、形式、および規則で構成されます。 サポートされている形式は solr
のみであり、solr
形式によって規則の構築が決まります。
シノニム マップを作成するには、プログラムで作成します。 ポータルでは、シノニム マップ定義はサポートされていません。
「シノニム マップの作成 (REST API)」を使用して、シノニム マップを作成します。
POST /synonymmaps?api-version=2024-07-01
{
"name": "geo-synonyms",
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
Washington, Wash., WA => WA\n"
}
ルールを定義する
マッピング規則は、SynonymGraphFilter のドキュメントで説明されている Apache Solr のオープンソース類義語フィルター仕様に準拠しています。 solr
形式では、次の 2 種類の規則がサポートされています。
同義性 (用語はクエリで同等の代用語になります)
明示的なマッピング (用語は 1 つの明示的な用語にマップされます)
各規則は、改行文字 (\n
) で区切られます。 無料サービスでシノニム マップあたり最大 5,000 個の規則、その他のレベルでマップあたり最大 20,000 個の規則を定義できます。 各規則には最大 20 個の拡張 (つまり 1 つの規則内の項目) を設定できます。 詳細については、「シノニムの制限」をご覧ください。
クエリ パーサーにより、大文字または大文字と小文字が混在する用語が自動的に小文字に変換されます。 文字列内の特殊文字 (コンマやダッシュなど) を保持するには、シノニム マップの作成時に適切なエスケープ文字を追加します。
同義性規則
同義語の規則は、同じ規則内でコンマで区切られます。 1 つ目の例で、USA に対するクエリは、USA または "United States" (米国) または "United States of America" (アメリカ合衆国) に拡張されます。句で一致させる場合は、クエリ自体を引用符で囲まれた句のクエリにする必要があることに注意してください。
同義の場合、dog のクエリは、puppy と canine も含むようにクエリが拡張されます。
{
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
dog, puppy, canine\n
coffee, latte, cup of joe, java\n"
}
明示的なマッピング
明示的なマッピングの規則は、矢印 =>
によって示されます。 指定した場合、=>
の左側に一致する検索クエリの用語のシーケンスが、クエリ時に右側の代替語で置き換えられます。
明示的な場合、Washington (ワシントン)、Wash.、または WA のクエリは WA に書き換えられ、クエリ エンジンは用語 WA の一致のみを検索します。 明示的なマッピングは指定した方向にのみ適用され、この場合、クエリ WA が Washington に書き換えられることはありません。
{
"format": "solr",
"synonyms": "
Washington, Wash., WA => WA\n
California, Calif., CA => CA\n"
}
特殊文字のエスケープ
シノニムは、他のクエリ用語と同様にクエリ処理中に分析されます。つまり、予約文字と特殊文字の規則がシノニム マップ内の用語に適用されます。 エスケープが必要な文字の一覧は、単純な構文と完全な構文で異なります。
既定のアナライザーで破棄される文字を保持するには、それらが保持されるアナライザーに置き換えます。 選択肢には、ハイフンでつながれた単語を保持する Microsoft 自然言語アナライザーや、より複雑なパターン用のカスタム アナライザーなどが含まれます。 詳細については、部分的な語句、パターン、特殊文字に関する記事を参照してください。
円記号を使用して文字をエスケープする方法の例を次に示します。
{
"format": "solr",
"synonyms": "WA\, USA, WA, Washington\n"
}
JSON や C# などの他の言語では、円記号自体が特殊文字であるため、通常、二重にエスケープする必要があります。 JSON の例を次に示します。
{
"format":"solr",
"synonyms": "WA\\, USA, WA, Washington"
}
シノニム マップを管理する
シノニム マップは、クエリとインデックス作成のワークロードを中断することなく、更新できます。 ただし、フィールドに類義語マップを追加した後で類義語マップを削除すると、該当するフィールドを含むすべてのクエリは 404 エラーで失敗します。
シノニム マップの作成、更新、削除は、常にドキュメント全体の操作です。 シノニム マップの一部を段階的に更新または削除することはできません。 1 つの規則の更新でも、再読み込みが必要になります。
フィールドにシノニムを割り当てる
シノニム マップを作成したら、インデックス内のフィールドに割り当てます。 シノニム マップを割り当てるには、プログラムで割り当てます。 ポータルでは、シノニム マップ フィールドの関連付けがサポートされていません。
- フィールドは、
Edm.String
またはCollection(Edm.String)
のいずれかの型である必要があります - フィールドには
"searchable":true
が必要です - フィールドに含めることができるシノニム マップは 1 つだけです
検索サービスにシノニム マップが存在する場合、次回のクエリではそれが使用され、インデックスの再作成や再構築は必要ありません。
インデックスの作成または更新 (REST API) を使用して、フィールド定義を変更します。
PUT /indexes?api-version=2024-07-01
{
"name":"hotels-sample-index",
"fields":[
{
"name":"description",
"type":"Edm.String",
"searchable":true,
"synonymMaps":[
"en-synonyms"
]
},
{
"name":"description_fr",
"type":"Edm.String",
"searchable":true,
"analyzer":"fr.microsoft",
"synonymMaps":[
"fr-synonyms"
]
}
]
}
同義またはマップされたフィールドに対するクエリ
シノニム フィールドの割り当てによって、クエリの記述方法は変わりません。 シノニム マップの割り当て後の唯一の違いは、シノニム マップにクエリ用語が存在する場合、規則に応じて用語または語句が検索エンジンによって拡張または書き換えられることです。
クエリの実行中にシノニムが使用される方法
シノニムは、インデックスの内容を同等の用語で補完するクエリ拡張の手法ですが、シノニムの割り当てがあるフィールドでのみ機能します。 フィールド スコープ クエリでシノニム対応フィールドが "除外" されている場合、シノニム マップからの一致は表示されません。
シノニム対応フィールドの場合、シノニムは、関連付けられているフィールドと同じテキスト分析に従います。 たとえば、フィールドが標準の Lucene アナライザーを使用して分析される場合は、シノニム用語もクエリ時に標準の Lucene アナライザーの対象となります。 シノニム用語に句読点 (ピリオドやダッシュなど) を保持したい場合は、フィールドでコンテンツ保持アナライザーを適用します。
内部的には、類義語機能により、類義語を含む元のクエリは OR 演算子を使用して書き換えられます。 このため、検索結果の強調表示とスコアリング プロファイルは元の用語とシノニムを同等として処理します。
シノニムは自由形式のテキスト クエリにのみ適用され、フィルター、ファセット、オートコンプリート、または提案ではサポートされません。 オートコンプリートと提案は、元の用語にのみ基づき、シノニムの一致は応答に示されません。
開発 (非運用) 環境に既存のインデックスがある場合は、小さな辞書で実験して、シノニムの追加によって、スコアリング プロファイル、検索結果の強調表示、検索候補への影響など、検索操作がどのように変わるかを確認します。
ワイルドカード検索
シノニムの拡張は、ワイルドカード検索語句には適用されません。プレフィックス、あいまい検索、および正規表現語句は拡張されません。
シノニムの拡張とワイルドカード検索、正規表現検索、またはあいまい検索を 1 つのクエリで適用する必要がある場合は、OR 構文を使用してクエリを組み合わせることができます。 たとえば、クエリ構文が単純になるようにシノニムとワイルドカードを組み合わせる場合は、用語は <query> | <query>*
のようになります。