【问题标题】:Is there a way to "escape" ElasticSearch stop words?有没有办法“逃避” ElasticSearch 停用词?
【发布时间】:2013-07-27 17:52:34
【问题描述】:

我是 ElasticSearch 的新手,对停用词有疑问。我有一个包含美国州名的索引……例如:纽约/纽约、加利福尼亚/加利福尼亚、俄勒冈/俄勒冈。我相信俄勒冈州的缩写,“OR”是一个停用词,所以当我将状态数据插入索引时,我无法搜索“OR”。有没有办法为此设置自定义停用词,还是我做错了什么?

这是我构建索引的方式: curl -XPUT http://localhost:9200/test/state/1 -d '{"stateName": ["California","CA"]}' curl -XPUT http://localhost:9200/test/state/2 -d '{"stateName": ["New York","NY"]}' curl -XPUT http://localhost:9200/test/state/3 -d '{"stateName": ["Oregon","OR"]}'

搜索“NY”,效果很好。例如:

curl -XGET 'http://localhost:9200/test/state/_search?pretty=1' -d ' { "query" : { "match" : { "stateName" : "NY" } } }'

但是搜索“OR”,返回零命中:

curl -XGET 'http://localhost:9200/test/state/_search?pretty=1' -d ' { "query" : { "match" : { "stateName" : "OR" } } }'

我相信此搜索不会返回任何结果,因为 OR 是停用词,但我不知道如何解决这个问题。谢谢你的帮助。

【问题讨论】:

  • 这个答案有用吗?
  • 感谢贾瓦娜!很好的信息。

标签: elasticsearch


【解决方案1】:

您可以(并且绝对应该)通过根据您的数据和您想要搜索它的方式修改您的 mapping 来控制您索引数据的方式。

在您的情况下,我会禁用该特定字段的停用词,而不是修改停用词列表,但如果您愿意,您也可以这样做。关键是您使用的是默认映射,这是很好的开始,但正如您所见,您需要根据需要对其进行调整。

对于每个字段,您可以指定要使用的分析器。分析器定义您将文本拆分为将被索引的标记(标记器)的方式,以及您可以使用标记过滤器对每个标记进行的其他更改(甚至删除或添加新的)。

您可以在 creating your index 时指定您的映射,也可以在之后使用 put mapping api 更新它(只要您所做的更改向后兼容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2018-10-16
    • 2019-07-02
    • 1970-01-01
    相关资源
    最近更新 更多