2013-06-12 166 views
0

我想写一个查询,要求“区域”为530,“开始”为06192013或“区域”为“530”,“开始”为“空白” 。此外,在这两种场景中,“空间”为“顶部”或“空间2”为“底部”。这个查询似乎在抓取任何匹配这些场景的任何东西,我如何改变它以使其像我想要的那样工作?创建弹性搜索和或查询

{ 
    "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查询...