2013-07-26 40 views
1

我對ElasticSearch相當陌生,對停用詞有疑問。我有一個包含美國州名的索引....例如:紐約州/紐約州,加利福尼亞州/加利福尼亞州,俄勒岡州/俄勒岡州。我相信俄勒岡州的縮寫'OR'是一個停用詞,所以當我將狀態數據插入索引時,我無法搜索'OR'。有沒有一種方法可以爲此設置自定義停用詞或者我是否做錯了什麼?有沒有辦法「逃避」ElasticSearch停用詞?

這裏是我我建立索引: 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是停用詞,但我不知道如何解決這個問題。感謝您的幫助。

+0

該答案有用嗎? – javanna

+0

謝謝Javanna!良好的信息。 –

回答

4

根據您的數據以及您想要搜索的方式,您可以(也絕對應該)通過修改mapping來控制索引數據的方式。

在你的情況下,我會禁用特定字段的停用詞而不是修改停用詞列表,但如果你願意,你也可以做後者。問題的關鍵是,你使用的是默認的映射這是偉大的開始,但你可以看到,你需要調整它取決於你的需求。

對於每個字段,你可以指定哪些分析儀使用。分析器定義了(甚至刪除或添加新的),使用令牌過濾器進行索引,你也可以對每個令牌其他更改你分割你的文本標記(標記生成器)的方式。

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

相關問題