在Azure搜索中创建一个支持双方的EdgeNGram分析器
问题描述:
为Azure搜索定义自定义分析器时,可以从this列表中定义一个令牌过滤器。 我正试图支持搜索前缀和中缀。 例如:如果一个字段包含名称:123 456,我想搜索的条件包含:在Azure搜索中创建一个支持双方的EdgeNGram分析器
1
12
123
23
3
4
45
456
56
6
当使用这似乎这样的伎俩在EdgeNGramTokenFilterV2,有确定了“边”的选项财产,但只支持“前”和“后”,而不是两者。 “前”(缺省)值,生成该列表:
1
12
123
4
45
456
和后生成:
123
23
3
456
56
6
我尝试使用两个令牌2个EdgeNGramTokenFilterV2s,但是这两个滤波器组合如创建术语“2”或“5”:
1
12
123
23
3
4
45
456
56
6
2 // Unwanted
5 // Unwanted
我也尝试使用“反向”的道理,但是这一切都颠倒,结果仍然是错误的。
我只使用一个搜索字段(“名称”),并希望它保持这样。 (想到可以使用不同分析器使用名为“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"
}
]
}
是否有结合两者的选择,而不让他们忙乱起来的结果
答
添加两个字段到索引,用两个不同的自定义分析:一个前缀,一个用于后缀,当查询时,查询两个字段。
它肯定会工作,但似乎有点像黑客,你不觉得吗?它也迫使我使用一个字段映射函数。 –