2017-06-29 37 views
0

我正在嘗試創建一個查詢,它在切換到彈性搜索5後不同地匹配過濾器中的多個字段,但它們似乎沒有工作。這是我認爲查詢應該是:ElasticSearch - 具有多個子句的已過濾查詢ES 5

 query: { 
      bool: { 
       must: [{ match: { name: 'athing' }}], 
       filter: [ 
        { bool: { 
         must: [ 
          { term: { ownerId: 123} }, 
          { term: { itemId: 3453} }, 
         ] 
        }}, 
        { bool: { 
         minimum_should_match: 1, 
         must: [ 
          { term: { groupId: 123565} }, 
          { term: { groupId: 5555} }, 
         ] 
        }} 
       ] 
      } 
     } 

在這種情況下,結果必須匹配未分析的項目Id和組Id。在前面的代碼中,使用了彈性搜索1.5,匹配是通過在過濾器中放置'and'和'or'集合來完成的。這似乎不工作了。

我也想讓它查詢能夠讓任何人與傳遞的組ID(而不是所有的人)之一。我試圖在過濾器的第二個布爾查詢中做到這一點。

理想的情況下,我想具有匹配「athing」的查詢時,屬於所有者ID 123和3453的產品ID,它是存在於任一組ID 123565或5555

回答

1

嘗試

bool: 
    must: [ term: ownerId, term: itemId] 
    should: [ term: groupId, term: groupId ] 
    minimum_should_match: 1 
+0

這似乎工作,謝謝!有一個問題,根據我的理解,查詢意味着結果必須至少與必須和應該相匹配。這是否意味着符合必要條件的結果,而不是任何條款可以通過的結果? –