2014-10-09 1 views
4

Я пытаюсь построить запрос elasticsearch, чтобы возвращать документы для времени между полуночью и текущим временем дня для всех дат. Например, если я запустил запрос в 09:00:00, запрос вернет любой документ с отметкой времени между полуночью и 09:00:00, независимо от даты.elasticsearch: getMinuteOfDay() применяется к time() в диапазоне диапазона дат

Вот пример набора данных:

curl -XPUT localhost:9200/test/dt/_mapping -d '{"dt" : {"properties" : {"created_at" : {"type" : "date", "format": "YYYY-MM-DD HH:mm:ss" }}}}' 

curl -XPOST localhost:9200/test/dt/1 -d '{ "created_at": "2014-10-09 07:00:00" }' 
curl -XPOST localhost:9200/test/dt/2 -d '{ "created_at": "2014-10-09 14:00:00" }' 
curl -XPOST localhost:9200/test/dt/3 -d '{ "created_at": "2014-10-08 08:00:00" }' 
curl -XPOST localhost:9200/test/dt/4 -d '{ "created_at": "2014-10-08 15:00:00" }' 
curl -XPOST localhost:9200/test/dt/5 -d '{ "created_at": "2014-10-07 09:00:00" }' 
curl -XPOST localhost:9200/test/dt/6 -d '{ "created_at": "2014-10-07 16:00:00" }' 

и пример фильтра:

curl -XPOST localhost:9200/test/dt/_search?pretty -d '{ 
    "query": { 
    "filtered" : { 
     "filter" : { 
     "bool": { 
      "must": [ 
      { 
       "script" : { 
      "script" : "doc[\"created_at\"].date.getMinuteOfDay() < 600" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}' 

, где 600 представляет собой статический параметр, который я хочу заменить динамический параметр минут в зависимости от времени суток когда запрос выполняется.

Моя лучшая попытка - использовать метод getMinuteOfDay() для фильтрации каждого документа, но моя проблема заключается в том, как получить getMinuteOfDay() для текущего времени. Я попробовал варианты с использованием time() вместо жестко заданного параметра 600 в вышеуказанном запросе, но не могу понять это.

Любые идеи?

ответ

0

Это довольно поздно, но это может быть сделано с DateTime.now(), вы должны изменить свой запрос

GET test/dt/_search 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "script": { 
       "script": "doc[\"created_at\"].date.getMinuteOfDay() < DateTime.now().getMinuteOfDay()" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Надежда это помогает!

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