Как сделать 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/
но я не могу найти документацию по добавлению по умолчанию для всех документов, которые добавляются независимо от индекса и типа.
Ответы
Ответ 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"} '