2015-07-02 3 views
1

У меня есть поле резервирования, в котором хранится массив дат, для которых был зарезервирован элемент.Запрос Elasticsearch для проверки диапазона дат не в массиве дат

Образец данных:

{ 
    reservations: [ "05/03/2015", 
        "05/04/2015", 
        "05/05/2015", 
        "05/18/2015", 
        "05/19/2015" 
        ] 
} 

Я хотел бы найти диапазон дат в упругом поиска и возвращает все элементы, которые не содержат даты, попадающие на эти даты.

Итак, у меня есть параметр startDate и endDate для поиска. Тем не менее, фильтр диапазона дат для elasticsearch не будет соответствовать этому требованию. Могу ли я сделать это другим способом?

EDIT:

Я думаю, что Date Range фильтр не будет работать, потому что вы можете только сравнить startDate и endDate с gte или lt к только одно значение справа. У меня в основном есть куча дат слева (начало/конец диапазона дат), которые мне нужно проверить и добавить даты справа (несколько дат резервирования).

+1

Почему бы не диапазон дат работы? Вы можете дать более подробную информацию? Похоже, что вы что-то пробовали и не работали –

+0

@AndreiStefan Я начал с другого способа справиться с этим (http://stackoverflow.com/questions/29820179/elasticsearch-filter-out-multiple-ranges-of-dates) , Но я упростил способ хранения зарезервированных дат - в простом массиве. Но я думаю, что фильтр диапазона дат не работает, потому что вы можете сравнивать «startDate» и «endDate» с «gte» или «lt» только с одним значением справа. У меня в основном есть куча дат слева (начало/конец диапазона дат), которые мне нужно проверить и добавить даты справа (несколько дат резервирования). –

+0

@AyrtonSenna вы нашли решение? – musa

ответ

0

Эта проблема может быть решена с помощью вложенного объекта. Преобразование резервирования как вложенного объекта в основной документ, а также запросов диапазона будет работать.

Пример

{ 
    reservation : [ 
    {"thedate" : "2015-01-01"}, 
    {"thedate" : "2015-03-12"}, 
    ... 
    ] 
}