2015-11-01 2 views
3

У меня есть поле, содержащее массив целых чисел, например:elasticsearch для поля массива

_source: { 
    ... 
    prices: [ 
    20001, 
    30001 
    ] 
} 

Я хотел бы, чтобы отфильтровать результаты, такие, что цены содержат по меньшей мере один из списка значений, которые находятся между например: [20002,30000] # не возвращает указанный выше документ, потому что значение не находится между 20002 и 30000 но [10000,20002] вернется выше документа, поскольку 20001 в области цен вышеназванного документа составляет от 10000 и 20002

ответ

8

Elasticsearch всегда считает, что поле может содержат список va таким образом, должен работать range filter10. Если какой-либо из значений соответствует диапазону он будет фильтроваться в

Вы можете использовать этот фильтр как часть filtered query:.

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "range": { 
      "prices": { 
      "gte": 10000, 
      "lte": 20002 
      } 
     } 
     } 
    } 
    } 
} 

Однако фильтруется запрос устаревшей в 2.0, так что, если вы с помощью 2,0 можно лучше использовать bool query с фильтром:

{ 
    "query": { 
    "bool": { 
     "must": { 
     "match_all": {} 
     }, 
     "filter": { 
     "range": { 
      "prices": { 
      "gte": 10000, 
      "lte": 20002 
      } 
     } 
     } 
    } 
    } 
} 

Обратите внимание, что я использую фильтр в моих примерах, потому что вы просили фильтр :)

+0

Спасибо за ваш ответ, который правильно решает мой вопрос. – Robin

+0

Тогда, пожалуйста, примите ответ? :) – moliware

+0

Сделано! Это первый случай, когда я задаю вопросы здесь :) – Robin

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