我们现在使用Azure搜索微软语言分析器在一些特定的语言领域。在大多数情况下,它比标准的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”填充?
发布于 2019-03-15 01:54:48
不幸的是,您无法更改Microsoft令牌程序如何标准化数字。要解决这一限制,您可以为产品属性选择不同的分析器,或者在分析器配置中添加字符筛选器,对数字字符进行编码,这样令牌程序就会忽略数字字符,例如,使用MappingCharFilter.You可以找到示例这里,将每个数字映射到预期字符集之外的字符中,使用MicrosoftLanguageStemmingTokenizer作为标记器。
https://stackoverflow.com/questions/55149249
复制相似问题