2015-09-28 79 views
5

是否有可能有這樣最低也要匹配過濾查詢

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and" 
     } 
     } 
    } 
    } 

隨着"minimum_should_match": "2"語句查詢?

我知道我可以使用一個簡單的查詢(我試過了,它的工作原理),但我不需要計算得分。我的目標是過濾包含2個值的文檔。

該分數是否通常會嚴重影響檢索文檔所需的時間?

使用此查詢:

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and", 
      "minimum_should_match": "2" 
     } 
     } 
    } 
    } 

我得到這個錯誤:

QueryParsingException[[my_db] [terms] filter does not support [minimum_should_match]] 
+1

如果我理解你的問題,你正在尋找在名稱字段中使用'Anna','Mark'和'Joe'查找所有文檔,是否給出10%的相似度?如果我們有更長的名字,比如'Catherine'和'Wilhelmina'完全匹配,並且姓氏'Joe'因爲10%而被完全捨棄,會發生什麼? – IanGabes

+0

對不起,也許我的問題不是很清楚:) 我已經使用90%,以指定列表的子集。我正在編輯2. 也就是說,必須匹配Anna,Mark和Catherine的文檔。 與Anna,Catherine和Wilhelimina的文件不能匹配。 主要問題是,如果我使用最小匹配內部過濾查詢我得到'QueryParsingException [[my_db] [terms]過濾器不支持[minimum_should_match]];' – betto86

回答

3

最少應匹配是不是爲terms filter的參數。如果這是您正在尋找的功能,我可能會重寫查詢這樣的,使用bool query包裹在一個query filter

{ 
    "filter": { 
     "query": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
        "names": "Anna" 
        } 
       }, 
       { 
        "term": { 
        "names": "Mark" 
        } 
       }, 
       { 
        "term": { 
        "name": "Joe" 
        } 
       } 
      ], 
      "minimum_number_should_match": 2 
     } 
     } 
    } 
} 

你會得到的文檔最好精確匹配所有三個,但查詢也將匹配只有三個文件中有兩個文件。 must是一個隱含和。我們也不計算分數,因爲我們已經將查詢作爲過濾器來執行。

+0

關於在使用searchkick包裝的rails中實現這一點的任何建議。 – kishore

+1

不要在bool查詢中使用'must'。用'should'代替,因爲'minimum_number_should_match'只適用於should。 – AmazingTurtle