2015-09-18 1 views
1

Я работаю с ES, и мне нужен запрос, который возвращает разницу между двумя datetime (mysql timediff), но не нашел никакой функции ES для этого. Кто-нибудь, кто может мне помочь?Как рассчитать разницу между двумя датами в ElasticSearch

MySQL Query

SELECT SEC_TO_TIME(
    AVG(
     TIME_TO_SEC(
     TIMEDIFF(r.acctstoptime,r.acctstarttime) 
    ) 
    ) 
) as average_access 

FROM radacct 

Спасибо!

ответ

4

Ваше лучшее место - это поля, написанные сценарием. Вышеуказанный поисковый запрос должен работать, если вы включили динамический скриптинг, и эти поля даты определены как дата в сопоставлении.

{ 
    "script_fields": { 
    "test1": { 
     "script": "doc['acctstoptime'].value - doc['acctstarttime'].value" 
    } 
    } 
} 

Обратите внимание, что вы получите результат в эпоху, которую необходимо преобразовать в номинал.

Здесь вы можете найти около scripted field и некоторые из его примеров here.

+0

It Work !!!! Но мне пришлось включить динамические скрипты в config/elasticsearch.yml. См. Больше в [здесь] (http://stackoverflow.com/questions/24711168/elasticsearch-dynamic-scripting-disabled) Спасибо !!!!! – fuzeto