2013-11-08 3 views
0

Мы ищем по следующим полям в индексе:Override в Elasticsearch

  • individual_name (строка)
  • organisation_name (строка)
  • профиль (строка)
  • мест (строка)
  • общенациональная (булева)

Если пользователь ищет «оптику» в «Гамильтоне», и оптики в нашем индексе перечислил себя как «общенациональные» (но не конкретно в Гамильтоне), желаемое поведение что оптик будет отображаться с результатами Гамильтона - фактически игнорируя требование местоположения.

В настоящее время мы выполняем запрос multi_match, примером которого является ниже.

{ 
    "query": { 
     "filtered" : { 
      "query" : { 
       "multi_match": { 
        "query": "optometrist", 
        "zero_terms_query": "all", 
        "operator": "and", 
        "fields": [ 
         "individual_name^1.2", 
         "organisation_name^1.5", 
         "profile", 
         "accreditations" 
        ] 
       } 
      }, 
      "filter": { 
       "and": [{ 
        "term": { 
         "locations" : "hamilton" 
        } 
       }], 
      } 
     } 
    } 
} 

Как это может быть модифицирован таким образом, документы с "nationwide": "yes" возвращаются для этого запроса, независимо от местоположения?

Я пробовал запрос or под номером and, но, конечно, это проигнорировало multi_match.

ответ

1

Я думаю, что это даст вам желаемые результаты:

{ 
    "query": { 
     "filtered" : { 
      "query" : { 
       "multi_match": { 
        "query": "optometrist", 
        "zero_terms_query": "all", 
        "operator": "and", 
        "fields": [ 
         "individual_name^1.2", 
         "organisation_name^1.5", 
         "profile", 
         "accreditations" 
        ] 
       } 
      }, 
      "filter": { 
       "or": [ 
         {"term": {"locations" : "hamilton"}}, 
         {'term' : {'nationwide' : 'yes'}}   
       ], 
      } 
     } 
    } 
}