2015-09-14 7 views
1

В elasticsearch, я хочу сделать логический запрос так:Elasticsearch BOOL запрос

Пусть A, B, C, и D являются логическими условиями ("матч" условие). Я хочу, чтобы запрос elasticsearch с эквивалентом этого SQL запроса:

(A OR B OR C) AND D 

И я хочу, чтобы взвесить важность A, B и C с boost

Как структурировать JSON для этого запроса?

ответ

3

Вы можете использовать запрос bool и номер boost.

Как вы сказали, чтобы выполнить операцию OR среди полей A, B & C Вы должны использовать should запрос с minimum_should_match как 1 (Значение по умолчанию) получить read more about miminum_should_match. вы можете добавить boost также init.

Примечание: Например, я использовал термин query, вам нужно использовать соответствующий запрос для получения наилучших результатов в соответствии с вашими требованиями.

{ 
     "should": [ 
      { 
       "term": { 
        "A": "searchTerm" 
       } 
      }, 
      { 
       "term": { 
        "B": "searchTerm" 
       } 
      }, 
      { 
       "term": { 
        "C": "searchTerm" 
       } 
      } 
     ], 
     "minimum_should_match": 1, 
     "boost": 1 
    } 

И для выполнения AND операции между выше запросом и другим полем, которое нужно добавить это с must запросом, наконец, запрос BOOL будет вроде как ниже

{ 
    "bool": { 
     "must": [ 
      { 
       "term": { 
        "D": "searchTerm" 
       } 
      }, 
      { 
       "should": [ 
        { 
         "term": { 
          "A": "searchText" 
         } 
        }, 
        { 
         "term": { 
          "B": "searchText" 
         } 
        }, 
        { 
         "term": { 
          "C": "searchText" 
         } 
        } 
       ], 
       "minimum_should_match": 1, 
       "boost": 1 
      } 
     ] 
    } 
} 

Это будет выполнять логическое что вы упомянули в вопросе (A || B || C) & & D.

Ссылки:

+0

Там есть ошибка в вашем последнем примере. {} Не должен находиться вокруг блока "should". – rvheddeg

Смежные вопросы