2016-03-01 6 views
1

Предположим, моя таблица имеет 2 поля: имя_пользователя и возраст Я хочу проверить имя пользователя: [john, mary, jim], и этот пользователь имеет «возраст» 20. Как Я делаю? Я думаю, что будет объединить 2 запросов ниже:Elasticsearch: запрос условий слияния и запрос соответствия

  • Срок запроса: { "термины": { "пользователь": [ "Джон", "Мэри", "джим"] } }

  • И матч запроса:

    { "запрос": { "матч": { "возраст": 20} } }

Но я не уверен. Пожалуйста, помогите мне. Благодарю.

ответ

3

Вопрос terms представляется подходящим для названия. Тем не менее, я бы порекомендовал фильтр term для «возраста», поскольку это числовое значение. Как правило, запрос match предназначен для полей analyzed, которые вы планируете выполнять в режиме полнотекстового поиска.

В качестве примера, вы можете связать два критерия поиска вместе с использованием filtered запроса, как это:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "terms": { 
      "user_name": ["john","mary","jim"] 
     } 
     }, 
     "filter": { 
     "term": { 
      "age": 20 
     } 
     } 
    } 
    } 
} 

Другая возможность состоит в том, чтобы объединить свои критерии поиска, используя bool запрос. Например.

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "terms": { 
      "user_name": ["john","mary","jim"] 
      } 
     }, 
     { 
      "term": { 
      "age": 20 
      } 
     } 
     ] 
    } 
    } 
} 

Посмотрите на documentation for Bool Query здесь.

+0

Большое спасибо. Я получил это :) –

+0

@TriPham рад, что я мог бы помочь! – BrookeB

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