我是Elasticsearch全新的,想将一个现有字段数据类型从"字符串"类型更新为"文本"类型。我尝试过,但最终得到了这个例外: "No handler for type [text] declared on field [Name]"
任何建议,我的Elasticsearch版本 -
{
"name" : "Tej",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "raiQbq0ySUioBScsptsTzQ",
"version" : {
"number" : "2.4.4",
"build_hash" : "fcbb46dfd45562a9cf00c604b30849a6dec6b017",
"build_timestamp" : "2017-01-03T11:33:16Z",
"build_snapshot" : false,
"lucene_version" : "5.5.2"
},
"tagline" : "You Know, for Search"
}
索引映射细节 -
{"customer":{"mappings":{"external":{"properties":{"Name":{"type":"string"},"age":{"type":"long"},"doc":{"properties":{"age":{"type":"long"},"name":{"type":"string"}}},"name":{"type":"string"}}}}}}
根据文档 - 我使用以下命令更新现有数据类型
`curl -i -X PUT
-H "Content-Type:application/json"
-d
'{
"external" : {
"properties" : {
"Name" : {"type" : "text"}
}
}
}
'
'http://10.200.14.15:9200/customer/_mapping/external'`
响应
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "No handler for type [text] declared on field [Name]"
}
],
"type": "mapper_parsing_exception",
"reason": "No handler for type [text] declared on field [Name]"
},
"status": 400
}
您选择Elasticsearch 2.4.4的任何原因。而不是5.x?从您的集群的名称来看,这是您的个人...我问的原因是,在5中不再使用字符串值,并且映射也略有不同。
根据个人经验,如果其中有任何数据,则无法更改现有字段的映射。您应该能够使用新值更新映射模板,并应使用新值创建任何新模板。
如果要更改现有字段的类型,则必须使用新的映射创建一个新索引,然后从新的数据中迁移所有数据。根据尺寸,这可能是...
您获得此功能的原因是,在Elasticsearch的2.4版本中不支持"文本"数据类型。
这是受支持的数据类型的完整列表:
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/mapping-types.html
坚持"字符串"数据类型或升级您的elasticsearch。