2013-06-12 1 views
0

"area"가 530이고 "starting"이 06192013이거나 "area"가 "530"이고 "starts"이 "blank"가되는 쿼리를 작성하려고합니다. . 또한이 두 시나리오에서 "공간"은 "최상위"또는 "공간 2"는 "최하위"가됩니다. 이 쿼리는 이러한 시나리오 중 하나와 일치하는 것을 잡아 먹는 것처럼 보입니다. 원하는대로 작동하도록 어떻게 변경합니까?탄성 검색 AND OR 쿼리 만들기

{ 
    "size":25, 
    "from":0, 
    "query": { 
    "custom_filters_score": { 
     "query": { 
     "filtered": { 
      "query": { 
      "bool": { 
       "must": [ 
       {"term":{"type":"ghost"}}, 
       {"term":{"area":"530"}} 
       ] 
      } 
      }, 
      "filter" : { 
      "or": [ 
       {"terms":{"space": ["top"]}}, 
       {"terms":{"space2":["bottom"]}}, 
       { 
       "and": [ 
        {"term":{"area":"530"}}, 
        {"term":{"start":"06192013"}} 
       ] 
       }, 
       { 
       "and": [ 
        {"term":{"area":"530"}}, 
        {"term":{"starts":"blank"}} 
       ] 
       } 
      ] 
      } 
     } 
     }, 
     "filters": [ 
     {"filter":{"term":{"filter1":5743}}, "boost":"1000"}, 
     {"filter":{"term":{"filter2":4451}}, "boost":"64"}, 
     {"filter":{"term":{"filter3":["tech"]}}, "boost":"16"}, 
     {"filter":{"terms":{"filter4":[]}}, "boost":"8"}, 
     {"filter":{"terms":{"filter5":[]}}, "boost":"5"}, 
     {"filter":{"term":{"access":"1"}}, "boost":"2"} 
     ], 
     "score_mode":"total" 
    } 
    } 
} 

답변

1

거의 다 왔어! 이 시도 :

... 
"query" : { "match_all":{} }, 
"filter" : { 
    "and": [ 
     { 
      "or": [ 
       {"term":{"space": "top"}}, 
       {"term":{"space2":"bottom"}} 
      ] 
     }, 
     { 
      "and": [ 
       {"term":{"area":"530"}}, 
       { 
        "or": [ 
         {"term":{"start":"06192013"}}, 
         {"term":{"starts":"blank"}} 
        ] 
       } 
      ] 
     } 
    ] 
} 
... 

당신이 필터를 사용하여이 모든 것을해야한다 (이처럼 나던하는) 득점 필요하지 않는 한, 그들은 점수를 계산하고 빠르게 이것 때문에입니다하지 않습니다.

"query" : { "match_all":{} }은 모든 문서가 같은 점수 인 필터와 일치하도록합니다.

참고 : 한 요소의 배열을 사용하여 terms 쿼리를 term 쿼리로 바꿨습니다 ...