У меня есть список объектов в документе Elasticsearch.У каждого объекта есть поле даты.Я хочу вычислить минимальную разницу между двумя значениями дат объекта.
Моя версия Elasticsearch - 6.5
input example ex:
{
'activity':
[
{
date:'2018-01-01',
task:'meeting'
},
{
date:'2018-01-15',
task:'conference'
},
{
date:'2018-01-27',
task:'meeting'
},
{
date:'2018-02-01',
task:'party'
}
]
}
Я пробовал оба этих сопоставления, но оно не работает.
Mappping 1
{
"activity" : {
"properties" : {
"date" : {
"type" : "date",
},
"task" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
}
Mappping 2
o
{
"activity": {
"type": "nested",
"properties": {
"date": {
"type": "date"
},
"task": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
Код: -
this code return minimum difference between two dates
"script_fields" : {
"min_no_of_days" : {
"script" : {
"lang": "painless",
"inline": "int min_days = -1;
for (i=1, i<=ctx._source['activity'].length; i++)
{
days_diff = ctx._source['activity'][i].date - ctx._source['activity'][i-1].date;
if (min_days == -1 || min_days < days_diff){min_days =days_diff;}
}
return min_days; "
}
}
}
Приведенный выше скрипт будет выполняться для каждого документа всех записей и возвращать минимальную разницу дней для каждого документа.Я даже пытался вернуть длину поля активности, но это не сработало
Я ожидаю, что в результате
{
"min_no_of_days":5
}