ElasticSearch 文档只是不清楚如何执行此操作。
我索引了一些推文,其中一个字段 created_at 被索引为字符串而不是日期。我找不到如何通过 curl 调用重新索引此更改。如果重新索引是一个复杂的过程,那么我宁愿删除那里的内容并重新开始。但是,我也找不到如何指定字段类型!
任何帮助是极大的赞赏。
ElasticSearch 文档只是不清楚如何执行此操作。
我索引了一些推文,其中一个字段 created_at 被索引为字符串而不是日期。我找不到如何通过 curl 调用重新索引此更改。如果重新索引是一个复杂的过程,那么我宁愿删除那里的内容并重新开始。但是,我也找不到如何指定字段类型!
任何帮助是极大的赞赏。
您需要使用Put Mapping API 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"}
}
}
}
'
如果要插入 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"}
}
}
新版本的 Elasticsearch 不支持更改字段类型,但我们可以通过重新索引来实现。您可以按照以下步骤来实现索引的重新编排并更改 Elasticsearch 中的类型。
创建新索引
PUT project_new
使用新的字段类型映射更新映射
PUT project_new/_mapping/_doc
{
"properties": {
"created_by": {
"type": "text"
},
"created_date": {
"type": "date"
},
"description": {
"type": "text"
}
}
}
用旧索引重新索引新索引,即数据迁移
POST _reindex
{
"source": {
"index": "project"
},
"dest": {
"index": "project_new",
"version_type": "external"
}
}
将新建索引的别名更改为指向旧索引名称
POST _aliases
{
"actions": [
{
"add": {
"index": "project_new",
"alias": "project"
}
},
{
"remove_index": {
"index": "project"
}
}
]
}
现在您将能够在现有索引中查看更新的类型。
在Elelasticsearch 版本 6.4.3中测试和工作
更新现有索引中的字段类型:
PUT test-index/doc/_mapping
{
"doc" : {
"properties" : {
"testDateField" : {"type" : "date"}
}
}
}
在现有索引中添加具有特定类型的字段:
PUT test-index
{
"mappings": {
"doc": {
"properties": {
"testDateField" : {
"type": "date"
}
}
}
}
}