2013-06-11 70 views
4

任何人都可以帮助我解决这个问题吗?我收到一个错误返回:“没有查询注册为[或]”我构造这个错误?它应该过滤所有结果,其中区域为530,开始为空,或者区域为530,开始为“06192013”​​,然后基于该结果使用其他过滤器提升文档。Elastic搜索:没有查询注册[或]

{ 
    "query": { 
    "custom_filters_score": { 
     "query": { 
     "bool": { 
      "must": [ 
      {"field":{"sector":"sector1"}}, 
      {"term":{"user_type":"ghost"}}, 
      {"term":{"area":"530"}} 
      ] 
     }, 
     "filter":{ 
      "or": [ 
      { 
       "and": [ 
       {"term":{"area":"530"}}, 
       {"term":{"start":"06192013"}} 
       ] 
      }, 
      { 
       "and": [ 
       {"term":{"area":"530"}}, 
       {"term":{"start":"blank"}} 
       ] 
      } 
      ] 
     } 
     }, 
     "filters": [ 
     {"filter":{"term":{"relevance" :5726}},"boost":"1000"}, 
     {"filter":{"term":{"relevance2":5726}},"boost":"100"} 
     ], 
     "score_mode":"total" 
    } 
    } 
} 

回答

5

包含或过滤器的过滤器对象放错了位置。我想你想使用一个filtered query包含bool查询和或像这样的过滤器:

{ 
    "filtered" : { 
     "bool": { 
      "must": [ 
      {"field":{"sector":"sector1"}}, 
      {"term":{"user_type":"ghost"}}, 
      {"term":{"area":"530"}} 
      ] 
     }, 
     "filter" : { 
      "or": [ 
      { 
       "and": [ 
       {"term":{"area":"530"}}, 
       {"term":{"start":"06192013"}} 
       ] 
      }, 
      { 
       "and": [ 
       {"term":{"area":"530"}}, 
       {"term":{"start":"blank"}} 
       ] 
      } 
      ] 
     } 
    } 
}