Подтвердить что ты не робот

Как сделать elasticsearch добавлять поле timestamp для каждого документа во всех индексах?

Эксперты Elasticsearch,

Мне не удалось найти простой способ просто указать ElasticSearch вставить поле _timestamp для всех документов, которые добавляются во все индексы (и все типы документов).

Я вижу пример для конкретных типов: http://www.elasticsearch.org/guide/reference/mapping/timestamp-field/

а также посмотрите пример для всех индексов для определенного типа (используя _all): http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/

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

4b9b3361

Ответ 1

Вы можете сделать это, предоставив его при создании индекса.

$curl -XPOST localhost:9200/test -d '{
"settings" : {
    "number_of_shards" : 1
},
"mappings" : {
    "_default_":{
        "_timestamp" : {
            "enabled" : true,
            "store" : true
        }
    }
  }
}'

Это автоматически создаст _timestamp для всего, что вы указали в индексе. Затем после индексации чего-то при запросе поля _timestamp оно будет возвращено.

Ответ 2

Elasticsearch раньше поддерживал автоматическое добавление временных меток к индексируемым документам, но устарела эта функция в 2.0.0

Начиная с версии 5.5 документация:

Поля _timestamp и _ttl устарели и теперь удалены. В качестве замены _timestamp вы должны заполнить поле обычной даты текущей отметкой времени на стороне приложения.

Ответ 3

Добавление еще одного способа получить отметку времени индексации. Надеюсь, что это может кому-то помочь.

Входящий конвейер можно использовать для добавления метки времени при индексации документа. Вот пример примера:

PUT _ingest/pipeline/indexed_at
{
  "description": "Adds indexed_at timestamp to documents",
  "processors": [
    {
      "set": {
        "field": "_source.indexed_at",
        "value": "{{_ingest.timestamp}}"
      }
    }
  ]
}

Раньше для упругого поиска использовались именованные конвейеры, из-за чего необходимо указать параметр "конвейер" в конечной точке упругого поиска, которая используется для записи/индексации документов. (Ссылка: ссылка). Это было немного хлопотно, так как вам нужно было бы внести изменения в конечные точки на стороне приложения.

В версии Elastic search> = 6.5 теперь вы можете указать конвейер по умолчанию для индекса, используя настройки index.default_pipeline. (Подробнее см. ссылку)

Вот, чтобы установить конвейер по умолчанию:

PUT ms-test/_settings
{
  "index.default_pipeline": "indexed_at"
}

Я еще не пробовал, так как не обновился до ES 6.5, но приведенная выше команда должна работать.

Ответ 4

сначала создайте индекс и свойства индекса, такие как field и datatype, а затем вставьте данные, используя API остальных.

ниже приведен способ создания индекса с полем properties. Выполните следующее в консоли kibana

'PUT /vfq-jenkins
{
"mappings": {
"properties": {
"BUILD_NUMBER": { "type" : "double"},
"BUILD_ID" : { "type" : "double" },
"JOB_NAME" : { "type" : "text" },
"JOB_STATUS" : { "type" : "keyword" },
"time" : { "type" : "date" }
 }}}'    

следующий шаг - вставить данные в этот индекс:   завиток -u эластичный: changeme -X POST http://elasticsearch:9200/vfq-jenkins/_doc/?pretty   -H Тип содержимого: application/json -d '{   "BUILD_NUMBER": "83", "BUILD_ID": "83", "JOB_NAME": "OMS_LOG_ANA", "JOB_STATUS": "SUCCESS",   "time": "2019-09-08'T'12: 39: 00"} '