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

Как обновить тип поля в elasticsearch

В документах ElasticSearch просто не ясно, как это сделать.

Я проиндексировал некоторые твиты и одно из полей, created_at, индексировалось как строка вместо даты. Я не могу найти, как переиндексировать с этим изменением через завиток. Если переиндексирование - сложный процесс, то я бы скорее просто удалил то, что там, и начнется. Но я не могу найти, как указать типы полей!

Любая помощь очень ценится.

4b9b3361

Ответ 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"
        }
      }
    }
  }
}