2014-01-21 21 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