2015-05-09 96 views
1

我使用Elasticsearch來允許用戶輸入一個術語來搜索。我有以下屬性的名字「我想要搜索,例如:Elasticsearch多項搜索

'name': 'The car is black'

我想有這個文件,如果下面是用於搜索black carcar black返回。

我試過做一個布爾必須和多個術語['black', 'car']但它似乎只適用於整個字符串是匹配。

所以我真正想做的是更多的是,這個詞包含任何順序的兩個詞。

有人能讓我走上正軌嗎?一段時間以來,我一直在嘲弄我的頭腦。

+0

你可以分享映射和查詢嗎?這可能與[分析器](http://www.elastic.co/guide/en/elasticsearch/reference/1.5/analysis-analyzers.html) – moliware

+0

有關。我的文檔如下所示: /my_index/food { _id:1, 'category':'dessert', 'name':'healthy cinnamon apple strudel' } 因此,如果用戶有'健康蘋果'的搜索字詞,這將匹配,但如果他們鍵入'蘋果派'它不匹配,因爲該名稱不包含他們鍵入的所有單詞。 – mvcNewbie

回答

0

如果它看起來像它只有在整個字符串匹配工作,首先要確保在索引映射您的字符串屬性name進行了分析,即映射該物業不包含"index": "not_analyzed"。如果不是這樣,你需要重新索引你的索引,以便能夠搜索令牌而不僅僅是整個短語。

一旦你確定你的字符串進行分析,你可以使用:

  1. "minimum_should_match"參數等於單詞的數量條款的查詢輸入。
  2. 帶有must子句的Bool查詢每個單詞包含詞條查詢。
  3. Common terms query它有一個非常乾淨的語法用於此目的(您不需要分解輸入字符串並在您的應用程序中構建更復雜的查詢結構,就像前兩個一樣)除了採取更智能的方法來停用分析。
+0

優秀的答案,謝謝你的幫助tiurin! – mvcNewbie