Как обновить тип поля в elasticsearch
В документах ElasticSearch просто не ясно, как это сделать.
Я проиндексировал некоторые твиты и одно из полей, created_at, индексировалось как строка вместо даты. Я не могу найти, как переиндексировать с этим изменением через завиток. Если переиндексирование - сложный процесс, то я бы скорее просто удалил то, что там, и начнется. Но я не могу найти, как указать типы полей!
Любая помощь очень ценится.
Ответы
Ответ 1
Вам нужно определить отображение с помощью Put Mapping AP I.
curl -XPUT 'http://localhost:9200/twitter/_doc/_mapping' -H 'Content-Type: application/json' -d '
{
"_doc" : {
"properties" : {
"message" : {"type" : "text", "store" : true}
}
}
}
'
Дата может быть определена следующим образом:
curl -XPUT 'http://localhost:9200/twitter/_doc/_mapping' -H 'Content-Type: application/json' -d '
{
"_doc" : {
"properties" : {
"user" : {"type" : "keyword", "null_value" : "na"},
"message" : {"type" : "text"},
"postDate" : {"type" : "date"},
"priority" : {"type" : "integer"},
"rank" : {"type" : "float"}
}
}
}
'
Ответ 2
Вам также нужно указать формат, который не просто набирается, если вы вставляете timestamp mysql, тогда вы должны просто добавить к нему такой формат.
"properties": {
"updated_at": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
Если мы рассмотрим ваш пример, тогда он должен выглядеть как
"tweet" : {
"properties" : {
"user" : {"type" : "string", "index" : "not_analyzed"},
"message" : {"type" : "string", "null_value" : "na"},
"postDate" : {"type" : "date" , "format": "yyyy-MM-dd HH:mm:ss" },
"priority" : {"type" : "integer"},
"rank" : {"type" : "float"}
}
}
Ответ 3
Обновление типа поля в существующем индексе:
PUT test-index/doc/_mapping
{
"doc" : {
"properties" : {
"testDateField" : {"type" : "date"}
}
}
}
Добавление поля с определенным типом в существующий индекс:
PUT test-index
{
"mappings": {
"doc": {
"properties": {
"testDateField" : {
"type": "date"
}
}
}
}
}