有没有办法“逃避”ElasticSearch停用词?

时间:2013-07-26 14:23:18

标签: elasticsearch

我对ElasticSearch相当新,并对停用词有疑问。我有一个索引,其中包含美国的州名....例如:纽约/纽约,加利福尼亚/加利福尼亚州,俄勒冈州/或。我相信Oregon的缩写'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是停用词,但我不知道如何解决这个问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

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

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

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

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