Перебирать список элементов объекта в поле в сценарии вязкого поиска - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть список объектов в документе 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...