我目前正在使用azure搜索,为了实现中缀搜索,如在**'redwine'中搜索'win'**,应该会在搜索结果中找到redwine。在azure中,我的N元语法标记器配置如下
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "myCustomAnalyzer",
"tokenizer": "nGram",
"tokenFilters": [
"my_NGram"
],
"charFilters": []
}
]
"tokenFilters": [
{
"@odata.type": "#Microsoft.Azure.Search.NGramTokenFilterV2",
"name": "my_NGram",
"minGram": 2,
"maxGram": 3
}
]
现在,根据我的理解,上述配置应返回给我的红葡萄酒令牌应为Re, Red, ed, Wi, Win, in, ine, ne
,但相反,当我检查使用Azure分析端点生成的令牌时,生成的令牌低于,即只有最小克2个字符长度。此配置中可能缺少什么。
{
"@odata.context": "https://trialsearchresource.search.windows.net/$metadata#Microsoft.Azure.Search.V2021_04_30_Preview.AnalyzeResult",
"tokens": [
{
"token": "re",
"startOffset": 0,
"endOffset": 2,
"position": 1
},
{
"token": "ed",
"startOffset": 1,
"endOffset": 3,
"position": 3
},
{
"token": "dw",
"startOffset": 2,
"endOffset": 4,
"position": 5
},
{
"token": "wi",
"startOffset": 3,
"endOffset": 5,
"position": 7
},
{
"token": "in",
"startOffset": 4,
"endOffset": 6,
"position": 9
},
{
"token": "ne",
"startOffset": 5,
"endOffset": 7,
"position": 11
}
]
}
P.S我正在使用Azure搜索.Net核心SDK
1条答案
按热度按时间hc2pp10m1#
您使用的是
tokenFilters
,并且您尝试根据上面的预期结果定义的是tokenizer
,它允许最小克数为2,最大克数为3。以下定义应有助于您实现所需的目标:注意,我添加了一个
charFilter
来删除空格,因为如果没有它,标记器也会将白色Map为gram的一部分,所以对于“red wine”,将有gram:“d“、“w”、“艾德“、“wi”等等。