Записать фрейм данных в Elastic Search с помощью @timestamp

Я изучаю elastic Пакет R для записи фрейма данных в ElasticSearch. я использую docs_bulk функция.

Один из столбцов в моем фрейме данных - @timestamp, который находится в POSIXct формат. Но поле сохраняется в Elastic Search как строка. Любая идея о том, как я могу сохранить столбец в формате времени.

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

Пожалуйста, предложите.

Версия:

R: 3.3.1

Эластичный поиск - 2.4.1

ОС - Redhat

1 ответ

Решение

elastic не пытается захватить типы данных из вашего входного data.frame или списка docs_bulk() - Мы могли бы подумать о том, чтобы попытаться сделать это, но я думаю, что типы данных R не будут отображаться точно в типы Elasticsearch - возможно, придется поиграть с попытками отобразить типы данных. Вот как я это сделаю:

library('elastic')
connect()

Пустышка data.frame

df <- data.frame(
  date = as.POSIXct(seq(from = as.Date("2016-10-01"), 
                        to = as.Date("2016-10-31"), by = 'day')),
  num = 1:31
)

Создайте отображение в виде списка или строки JSON

mapping <- list(
  world = list(properties = list(
    date = list(
      type = "date",
      format = "yyyy-mm-dd HH:mm:ss"
    ),
    num = list(type = "long")
)))

Сделать индекс

index_create(index = "hello")

Создать отображение в индексе

mapping_create(index = "hello", type = "world", body = mapping)

Получить карту

mapping_get("hello")
#> $hello
#> $hello$mappings
#> $hello$mappings$world
#> $hello$mappings$world$properties
#> $hello$mappings$world$properties$date
#> $hello$mappings$world$properties$date$type
#> [1] "date"
#> 
#> $hello$mappings$world$properties$date$format
#> [1] "yyyy-mm-dd HH:mm:ss"
#> 
#> 
#> $hello$mappings$world$properties$num
#> $hello$mappings$world$properties$num$type
#> [1] "long"

Массовая загрузка data.frame

docs_bulk(df, index = "hello", type = "world")

Поиск по индексу

Search("hello")
Другие вопросы по тегам