Azure Search のカスタム アナライザーを定義する場合、このリストからトークン フィルターを定義するオプションがあります。プレフィックスとインフィックスの両方の検索をサポートしようとしています。例: フィールドに 123 456 という名前が含まれている場合、検索可能な用語に次のものが含まれるようにします。
1
12
123
23
3
4
45
456
56
6
トリックを行うと思われる EdgeNGramTokenFilterV2 を使用する場合、「サイド」プロパティを定義するオプションがありますが、「フロント」と「バック」のみがサポートされ、両方はサポートされません。"front" (デフォルト) 値により、次のリストが生成されます。
1
12
123
4
45
456
そして戻って生成します:
123
23
3
456
56
6
2 つのトークン 2 つの EdgeNGramTokenFilterV2s を使用してみましたが、これにより、「2」または「5」などの 2 つのフィルターを組み合わせて用語が作成されます。
1
12
123
23
3
4
45
456
56
6
2 // Unwanted
5 // Unwanted
「逆」トークンも使用してみましたが、これはすべてを逆にし、結果はまだ間違っています。
検索フィールド (「名前」) を 1 つしか使用していませんが、このままにしておきたいと思います。(別のアナライザーで「name_reverse」という名前の別のフィールドを使用するオプションを考えましたが、これは非常に非効率的であり、検索エンジンをデータ ソースに接続するときに多くの頭痛の種になります。
簡単に参照できるように、これは現在のインデックス作成リクエストです。
{
"name": "testindexboth",
"fields": [
{"name": "id", "type": "Edm.String", "key": true },
{"name": "Name", "type": "Edm.String", "searchable": true, "analyzer": "myAnalyzer"}
],
"myAnalyzer": [
{
"name": "myAnalyzer",
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"tokenizer": "standard_v2",
"tokenFilters":["front_filter", "back_filter"]
}],
"tokenFilters":[
{
"name":"front_filter",
"@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
"maxGram":15,
"side": "front"
},
{
"name":"back_filter",
"@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
"maxGram":15,
"side": "back"
}
]
}
結果を混乱させることなく、両方を組み合わせるオプションはありますか?