2015-07-19 3 views
0

Я следующий набор данных индексированы в моем elasticsearchElasticsearch фильтровать несколько полей

{ 
"title": "Professor", 
"class": [6001, 6015, 6018], 
"subject": [5010, 5012, 5013], 
"salary": 12500 
} 

{ 
"title": "Professor", 
"class": [6012, 6013, 6014], 
"subject": [5010, 5005, 5004], 
"salary": 16600 
} 

{ 
"title": "Principal", 
"class": [7001, 7010, 6018], 
"subject": [5010, 5012, 5013], 
"salary": 14750 
} 

{ 
"title": "Asst Professor", 
"class": [6012, 6013, 6014], 
"subject": [5010, 5005, 5004], 
"salary": 16600 
} 

Я пытаюсь найти

класс - 6001 ИЛИ 6018 ИЛИ 6013 И Subject - 5013 ИЛИ 5004 И Зарплата (диапазон) - от 12000 до 15000

Я использую нижеследующий запрос

{ 
    "query" : { 
     "filtered" : { 
     "filter" : { 
      "bool" : {    
        "must" : [ 
        { "term" : {"class" : [6001, 6018, 6013]}}, 
        { "term" : {"subject" : [5013, 5004]}}, 
        {"range" : {"salary" : {"gte": 12000,"lte": 15000}}} 
        ] 
       }}}}} 

Но я не получаю результат, который Я ожидаю, что в этом плохого?

ответ

0

Необходимо использовать условия фильтр вместо термин фильтр.

В соответствии с Документами:

Term Фильтр: Фильтры документы, которые имеют поля, содержащие термин.

Фильтр условий: Фильтрует документы, у которых есть поля, соответствующие любому из условий, указанных в .

{ 
    "query" : { 
     "filtered" : { 
     "filter" : { 
      "bool" : {    
        "must" : [ 
        { "terms" : {"class" : [6001, 6018, 6013]}}, 
        { "terms" : {"subject" : [5013, 5004]}}, 
        { "range" : {"salary" : {"gte": 12000,"lte": 15000}}} 
        ] 
       }}}}} 
+0

Это работает !! Как применять оператор И между терминами? – syv

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