我们现在在某些特定于语言的字段上使用Azure搜索Microsoft语言分析器。在大多数情况下,它具有比标准Lucene语言分析器更好的相关性。但是我们在验证en.microsoft分析器时发现了一个问题。
问题是,如果字段值包含数字。分析仪很聪明,可以在数字前保留冗余的“ 0”。
例如:
POST /analyze?api-version=2017-11-11
{
"text": "1",
"analyzer": "en.microsoft"
}
响应为:
"tokens": [
{
"token": "1",
"startOffset": 0,
"endOffset": 2,
"position": 0
},
{
"token": "nn1",
"startOffset": 0,
"endOffset": 2,
"position": 0
}
]
问题在于,如果字段值为“ 01”,则所有文本(例如“ 01”,“ 001”,“ 0001”,……)都将与该字段匹配。
我们有一个字段来保存产品属性名称/值对,例如“ brand:Contoso | size:1”。然后,即使搜索“ 0001”也可以返回具有该字段值的文档。这不是我们想要的。
所以,我的问题是,有什么方法可以自定义en.microsoft分析器,以便我们可以利用分析器强大的词干分析器,而避免在数字前填充“ 0”? >
答案 0 :(得分:0)
不幸的是,您无法更改Microsoft标记程序对数字进行标准化的方式。要解决此限制,您可以为产品属性选择不同的分析器,或在分析器配置中添加字符过滤器以对数字字符进行编码,以便令牌生成器将其忽略,例如,使用MappingCharFilter。您可以找到示例here,并使用MicrosoftLanguageStemmingTokenizer作为令牌生成器。