在Azure Search中创建一个支持双方的EdgeNGram分析器



在为Azure Search定义自定义分析器时,可以选择从此列表中定义令牌筛选器。我正在努力支持前缀和中缀的搜索。例如:如果一个字段包含名称:123 456,我希望可搜索的术语包含:

1
12
123
23
3
4
45
456
56
6

当使用EdgeNGramTokenFilterV2时,可以选择定义"side"属性,但只支持"front"one_answers"back",而不支持两者。"front"(默认)值生成以下列表:

1
12
123
4
45
456

并反向生成:

123
23
3
456
56
6

我尝试使用两个令牌两个EdgeNGramTokenFilterV2,但这会通过组合两个过滤器创建术语,例如:"2"或"5":

1
12
123
23
3
4
45
456
56
6
2 // Unwanted
5 // Unwanted

我也尝试过使用"reverse"标记,但这会颠倒一切,结果仍然是错误的。

我只使用一个搜索字段("名称"),希望它保持原样。(考虑过在不同的分析器中使用名为"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"
}
]
}

有没有把两者结合起来的选择,而不让他们打乱结果?

使用两个不同的自定义分析器向索引添加两个字段:一个用于前缀,一个用于后缀。查询时,对这两个字段进行查询。

相关内容

最新更新