2015-08-01 5 views
0

Я отправляю запрос от клиента для документов, где currentDate находится между двумя значениями, прикрепленными ко всем документам. Документы имеют expireDate и availableDate.Elasticsearch daterange с использованием двух полей даты

Как сформулировать этот запрос? Как догадке я придумал следующее, который не работает:

{ 
    "constant_score": { 
    "filter": { 
     "range" : { 
     "expiredate" : { 
      "lte": "2015-08-15T11:28:45.114-07:00" 
     }, 
     "availabledate" : { 
      "gte": "2015-08-11T11:28:45.114-07:00" 
     } 
     } 
    } 
    } 
} 

Это даже выглядит неправильно, потому что AFAIK диапазон не будет работать на составной объекте или массив односторонних диапазонов. Наверное, я мог бы добавить целый новый фильтр, чтобы по одному для каждого поля. Есть ли способ использовать один диапазон дат для двух полей?

ответ

1

Правильный способ выражения этого запроса состоит в использовании двух фильтров range (по одному для каждого поля даты) и поместить их в другой фильтр bool/must.

{ 
    "query": { 
    "constant_score": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "range": { 
       "expireDate": { 
        "lte": "2015-08-15T11:28:45.114-07:00" 
       } 
       } 
      }, 
      { 
       "range": { 
       "availabledate": { 
        "gte": "2015-08-11T11:28:45.114-07:00" 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Работа для меня, спасибо – pferrel

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