2013-11-25 125 views
0

我想做一個布爾查詢與多個必須/應該在另一個布爾查詢內獲得嵌套的AND/OR查詢字符串,如下面的查詢。在elasticsearch的另一個布爾查詢中執行嵌套布爾查詢

{ 
    "query": { 
    "bool": { 
     "should": [ 
     **// SHOULD BLOCK 1** 
     { 
      <should_query_1> 
     }, 
     **// SHOULD BLOCK 2** 
     { 
      <should_query_2> 
     }, 
     **// SHOULD BLOCK 3** 
     { 
      "bool": { 
      "must": [ 
       <should_level_2_MUST_query_1>, 
       <should_level_2_MUST_query_2>, 
      { 
     "bool": { 
      "must": [ 
      <should_level_3_MUST_query_1>, 
      <should_level_3_MUST_query_2>, 
      ]   
     } 
      } 
      ] 
      } 
     }, 
     **// SHOULD BLOCK 4** 
     { 
      "bool": { 
      "must": [ 
       <should_MUST_query_1>, 
       <should_MUST_query_2> 
      ] 
      } 
     } 
     ] 
    } 
    }, 
    "size": 25, 
    "from": 0, 
    "fields": [] 
} 

預期的行爲是,我想應該塊1,2,3,4「或運算和內‘應該阻止3’我希望‘Should_level_2_MUST_queries’是」 AND後。

但在現實中,當我使用這個語法應塊3 & 4「的第一級相與本身並保存執行結果的塊1 & 2.請幫我重新整理/重寫此查詢爲我實現預期的行爲。

在此先感謝

回答

1

據我所知,elasticsearch不具有和/或像在布爾代數水平。最後總是有一個關卡。

因此,在您的查詢中,您基本上會說「我需要3個必須查詢」,因此這3個必須查詢的組合結果將在最終響應中。

如果我理解正確的話,要達到預期的行爲,你應該做到以下幾點:

  • 轉換都務必要應
  • 如果需要,把那些不宜"minumum_should_match:N"規則,其中N是一個整數

指南:

+0

謝謝你今天會試試 – Baaju