1

我对 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" } } }'

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

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

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

4

1 回答 1

4

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

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

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

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

于 2013-07-27T09:52:34.777 回答