Эластичный индекс индекса unix timestamp

Мне нужно индексировать документы, содержащие поле "время", значение которого представляет собой целое число, представляющее количество секунд с момента epoch (aka unix timestamp).

Я читал документы ES и нашел это:

http://www.elasticsearch.org/guide/reference/mapping/date-format.html

Но кажется, что если я хочу отправить временные метки unix и хочу, чтобы они были сохранены в поле "дата" (целочисленное поле мне не полезно) у меня есть только два варианта:

  • Внедрить собственный формат даты
  • Преобразование в поддерживаемый формат отправителя

Есть ли еще один вариант, который я пропустил?

Спасибо!

Ответ 1

Если вы указываете сопоставление ES, это поле является датой, оно может использовать epoch millis в качестве входа. Если вы хотите, чтобы ES автоматически обнаруживала, вам придется предоставить ISO8601 или другой формат для обнаружения.

Обновление. Следует также отметить, что вы можете влиять на то, какие строки ES будут распознавать как даты в вашем сопоставлении. http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html

Ответ 2

Если вы хотите использовать Kibana, который я ожидаю, и визуализируйте в соответствии со временем записи/записи, вам понадобится хотя бы одно поле для поля даты.

Обратите внимание, что вы должны установить поле как тип даты ДО того, как вы вводите любые данные в /index/type. В противном случае он будет храниться так долго и неизменно.

Простой пример, который можно вставить в плагин чудо/смысл:

# Make sure the index isn't there
DELETE /logger

# Create the index
PUT /logger

# Add the mapping of properties to the document type `mem`
PUT /logger/_mapping/mem
{
  "mem": {
    "properties": {
      "timestamp": {
        "type": "date"
      },
      "free": {
         "type": "long"
      }
    }
  }
}

# Inspect the newly created mapping
GET /logger/_mapping/mem

Запустите каждую из этих команд в серии.

Генерировать свободные записи журнала

Вот простой script, который эхо к вашему терминалу и регистрируется в вашем локальном elasticsearch:

while (( 1==1 )); do memfree=`free -b|tail -n 1|tr -s ' ' ' '|cut -d ' ' -f4`; echo $load; curl -XPOST "localhost:9200/logger/mem" -d "{ \"timestamp\": `date +%s%3N`, \"free\": $memfree }"; sleep 1; done

Осмотрите данные в упругом поиске

Вставьте это в свой чудо/смысл

GET /logger/mem/_search

Теперь вы можете перейти в Kibana и сделать несколько графиков. Kibana автоматически определит ваше поле даты.