我对elasticsearch很新,希望将一个现有的字段数据类型从“string”类型更新为“text”类型。我已经尝试过,但最终得到了这个例外:"No handler for type [text] declared on field [Name]"
任何建议,我的弹性搜索版本 -
{
"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
}
答案 0 :(得分:0)
你选择Elasticsearch 2.4.4的原因。而不是5.X? 根据您的群集的名称来判断,这是您个人的... 我问的原因是,字符串值在5中不再使用,映射也略有不同。
根据个人经验,如果现有字段中包含任何数据,则无法更改现有字段的映射。您应该能够使用新值更新映射模板,并且应使用新值创建任何新模板。
如果要更改现有字段的类型,则必须使用新映射创建新索引,然后从新映射中迁移旧索引中的所有数据。根据尺寸,这可能是一个非常痛苦...
答案 1 :(得分:0)
你得到这个的原因是因为," Text" 2.4版本的ElasticSearch不支持datatype。
以下是支持的数据类型的完整列表:
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/mapping-types.html
要么坚持"字符串"数据类型或升级您的ElasticSearch。