我一直在尝试在我的一个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