2014-01-21 33 views
0

的命中我有幾個「應該」子句的查詢:通過條件2如何區分幾個條款應該

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "bool": { 
        "should": [ 
         { 
          "query_string": { 
           "query": "<condition1>" 
          } 
         }, 
         { 
          "query_string": { 
           "query": "<condition1>" 
          } 
         } 
        ] 
       } 
      }, 
     } 
    }, 
    "size": 1000, 
    "sort": [ 
     { 
      "@timestamp": { 
       "order": "asc" 
      } 
     } 
    ] 
} 

我怎樣才能找出查詢結果由條件1產生的,並?是否可以爲不同條件注入具有不同值的字段,或以任何其他方式區分命中?

回答

1

您可以使用named queries來實現這一目標。

{ 
    "query": { 
     "bool": { 
      "should": [ 
       { 
        "query_string": { 
         "query": "<condition1>", 
         "_name": "sub_query_1" 
        } 
       }, 
       { 
        "query_string": { 
         "query": "<condition1>", 
         "_name": "sub_query_2" 
        } 
       } 
      ] 
     } 
    } 
} 

你的結果,那麼將包含matched_filters陣列或者sub_query_1sub_query_2,或兩者在裏面。

更新

播放鏈接:https://www.found.no/play/gist/af1a1fa2b5cf3aa279b1

+0

我已經試過這一點;該查詢在沒有任何錯誤消息的情況下執行,但結果與以前完全相同。沒有新增加。 – user626528

+0

你在哪個elasticsearch版本?命名查詢僅從0.90.4起向上存在。 – knutwalker

+0

0.90.5(我猜它會返回一個錯誤信息,如果我用了一個未知的查詢子句) – user626528