Найти полную дату, а не только год (Elasticsearch)

В обычной ситуации у меня есть дата заполнения, но для некоторых записей у меня есть даты в формате гггг/гггг-ММ. И в результатах поиска мне не нужны даты, у которых есть только год.

Определение структуры:

[premiere_date] => Array
  (
    [type] => date
    [format] => dd.MM.yyyy||MM.yyyy||yyyy||yyyy-MM-dd
 )

Пример данных:

{'name': 'a', 'premiere_date': '1984-11-22'},
{'name': 'b', 'premiere_date': '1984-12'},
{'name': 'c', 'premiere_date': '1985'},

В результате я хочу:

{'name': 'a', 'premiere_date': '1984-11-22'},
{'name': 'b', 'premiere_date': '1984-12'},

Я попытался добавить формат в фильтр диапазона, но это не сработало.

{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "premiere_date": {
                            "gte": "1983-12-22",
                            "lt": "1988-03-21",
                            "format": "yyyy-MM-dd"
                        }
                    }
                }
            ]
        }
    }
}

person bato3    schedule 09.01.2018    source источник


Ответы (1)


Elasticsearch преобразует значения "date" тип данных в длинное число, представляющее миллисекунды с эпохи UTC. Это представление, которое индексируется и ищется. Таким образом, Elasticsearch не знает неявно, что исходное значение даты из исходного документа имеет только год. Ваше приложение должно добавить еще одно поле, представляющее разрешение даты, и поиск также должен выполнять фильтрацию по этому полю. Например,

{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "premiere_date": {
             "gte": "1983-12-22",
             "lt": "1988-03-21"
          }
        }
      },
      "must_not": {
        "term": {
          "premiere_date_resolution": "year"
        }
      }
    }
  }
} 
person Chin Huang    schedule 09.01.2018
comment
Но когда я вспоминаю данные, я получаю то же самое year. (И я надеялся избежать добавления дополнительного столбца.) - person bato3; 10.01.2018