ElasticSearch не распознает тип даты, показанный как тип String - PullRequest
0 голосов
/ 17 сентября 2018

ElasticSearch версия: 6.3

определение отображения: ES_DOCTYPE = { "properties": { "UsageEndDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"}, "UsageStartDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"} } }

данные JSON:

{ 'UsageEndDate': '2018-08-01 02:00:00', 'UsageStartDate': '2018-08-01 01:00:00' } { 'UsageEndDate': '2018-08-02 02:00:00', 'UsageStartDate': '2018-08-02 01:00:00' }

создать индекс: es.index(index="test", doc_type='test', body=ES_DOCTYPE)

отправка данных: helpers.streaming_bulk(es, documents(), index="test", doc_type='test', chunk_size=1000)

Привет! Я выполнил свою работу по поиску в Google, но, возможно, ключевое слово слишком общее, поэтому я ничего не получил.

Когда я читаю документацию, ES должен иметь возможность автоматически находить формат даты, но даже если я добавлю определение отображения, эти UsageStartDate или UsageEndDate по-прежнему будут отображаться как string при просмотре их в Кибане.

Есть ли что-то, что я пропускаю?

большое спасибо :) 1026 *

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я сам разобрался,

dynamicTemplate = { "properties": { "UsageEndDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"}, "UsageStartDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"} }, "dynamic_templates": [ { "notanalyzed": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "string", "index": "not_analyzed" } } } ] }

и сначала поместил определение отображения, затем отправил данные в ElasticSearch

es.indices.put_mapping(index="test", doc_type='test', body={'test': dynamicTemplate})

es.index(index='test-index', doc_type='tweet', body=ES_DOCTYPE)
0 голосов
/ 17 сентября 2018

Согласно документам ElasticSearch работает с date следующим образом. Внутренне он хранит их в виде длинного числа, представляющего миллисекунды с начала эпохи. Для вывода даты всегда будут отображаться в виде строки.

Цитата из документации:

В JSON нет типа данных, поэтому даты в Elasticsearch могут быть следующими:

  • строки, содержащие отформатированные даты, например, «2015-01-01» или «2015/01/01 12:10:30 ".
  • длинное число, представляющее миллисекунды с начала эпохи.
  • целое число, представляющее секунды с начала эпохи.

Внутренне даты конвертируется в UTC (если указан часовой пояс) и сохраняется как длинное число, представляющее миллисекунды с начала эпохи.

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

...