我一直在尝试在我的一个doct字段(类型为 keyword )中实现 Snowball Analyzer 之类的功能。像,例如,复数应该完全像其单数一样对待,以使两者的结果相同。

最初,我很难在我的字段上设置分析器,只是为了发现 keyword 类型的字段不能具有分析器,而不能使用规范化器。因此,我尝试在这些字段上为 snowball 设置规范化器,但是似乎我的规范化器不允许使用 snowball 过滤器(可能是规范化器不支持雪球过滤器)

我无法更改字段的类型。我想实现一些功能,例如如果我的输入文本与餐厅相匹配,则应将其与 restaurant 相同,并给出结果,这样我就不必在该字段中添加餐厅作为关键字。

我们可以通过规范化器实现这一目标吗?我已经浏览了 flex 文档和各种帖子,但一无所知。以下是我尝试通过 flex 服务器的响应设置规范化器的方法。

PUT本地主机:9200 / db110 / _settings

{
  "analysis": {
    "normalizer": {
      "snowball_normalizer": {
        "filter": ["lowercase","snowball" ]
      }
    },
    "filter" : {
        "snow" : {
            "type" : "snowball",
            "language" : "English"
        }
    }
  }

}

响应
{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Custom normalizer [snowball_normalizer] may not use filter [snowball]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Custom normalizer [snowball_normalizer] may not use filter [snowball]"
    },
    "status": 400
}

最佳答案

你不能那样做! Snowball是词干分析器,用于全文搜索-例如文本数据类型,因为它是一个 token 过滤器,可操作每个单个 token 。使用关键字数据类型,您可以为该字段的所有内容创建一个 token 。您认为词干分析器如何在关键字字段中起作用?使用没有 token 的词干没有意义。关键字字段的规范化器仅是小写和ASCII折叠。文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/normalizer.html

09-11 18:55