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

我是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是停用词,但我不知道如何解决。感谢您的帮助。

回答:

您可以(并且绝对应该)通过根据数据以及要针对其搜索的方式修改映射来控制对数据建立索引的方式。

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

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

您可以在创建索引时指定映射,也可以在以后使用放置映射API更新索引(只要所做的更改是向后兼容的)。

以上是 有没有办法“逃脱” ElasticSearch停用词? 的全部内容, 来源链接: utcz.com/qa/399102.html

回到顶部