如何通过en.microsoft分析器自定义数字标记?

问题描述 投票:0回答:1

我们现在在一些特定于语言的字段上使用Azure搜索Microsoft语言分析器。在大多数情况下,它比标准的Lucene语言分析器具有更好的相关性。但是在验证en.microsoft analyzer时发现了一个问题。

问题是,如果字段值包含数字。分析仪很智能,允许在数字前面加上冗余的“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”填充?

azure-search
1个回答
1
投票

遗憾的是,您无法更改Microsoft标记生成器规范化数字的方式。要解决此限制,您可以为产品属性选择不同的分析器,或者在分析器配置中添加字符过滤器,对数字字符进行编码,以便令牌器忽略它们,例如,使用以下数字将每个数字映射到预期字符集外部的字符中。 MappingCharFilter。你可以找到here的例子,使用MicrosoftLanguageStemmingTokenizer作为你的标记器。

© www.soinside.com 2019 - 2024. All rights reserved.