我正在尝试使用reindex api进行弹性搜索
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html
这是我的源索引
"testtype": {
"_all": {
"enabled": false
},
"dynamic_templates": [
{
"message_field": {
"mapping": {
"fielddata": {
"format": "disabled"
},
"index": "analyzed",
"omit_norms": true,
"type": "string"
},
"match": "message",
"match_mapping_type": "string"
}
},
{
"string_fields": {
"mapping": {
"fielddata": {
"format": "disabled"
},
"index": "analyzed",
"omit_norms": true,
"type": "string",
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
}
},
"match": "*",
"match_mapping_type": "string"
}
}
],
"properties": {
"@timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"@version": {
"type": "string",
"index": "not_analyzed"
},
"app_code": {
"type": "string"
},
"data": {
"properties": {
"action": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"level": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"message": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
}
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
},
"header": {
"properties": {
"@timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"_id": {
"type": "long"
},
"app_code": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"host": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"meta_host": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"name": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"pid": {
"type": "long"
},
"source_id": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"source_name": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"user": {
"type": "string",
"norms": {
"enabled": false
},
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
}
}
},
"source_id": {
"type": "string"
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
所以它有一些string
字段,它们也有相应的原始字段。问题是默认字段是analyzed
。所以我希望新的索引是
{
"mappings": {
"test": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"path_unmatch":"data.message",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed",
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
}
}
}
}
]
}
}
}
旧索引有一些数据。所以我试着将其重新索引为
POST /_reindex
{
"source": {
"index": "oldindex",
"type": ["testtype"]
},
"dest": {
"index": "newindex"
}
}
在我这样做之后,我看到新的索引已经转换为
{
"newindex": {
"aliases": {},
"mappings": {
"testtype": {
"properties": {
"data": {
"properties": {
"action": {
"type": "string"
},
"level": {
"type": "string"
},
"message": {
"type": "string"
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
},
"header": {
"properties": {
"@timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"_id": {
"type": "long"
},
"app_code": {
"type": "string"
},
"host": {
"type": "string"
},
"meta_host": {
"type": "string"
},
"name": {
"type": "string"
},
"pid": {
"type": "long"
},
"source_id": {
"type": "string"
},
"source_name": {
"type": "string"
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"user": {
"type": "string"
}
}
}
}
},
"test": {
"dynamic_templates": [
{
"notanalyzed": {
"mapping": {
"fielddata": {
"format": "disabled"
},
"index": "not_analyzed",
"type": "string",
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
}
},
"match": "*",
"match_mapping_type": "string",
"path_unmatch": "data.message"
}
}
]
}
},
"settings": {
"index": {
"creation_date": "1461792130202",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "nho7V2PpTbqzfsUVWVdLkA",
"version": {
"created": "2030099"
}
}
},
"warmers": {}
}
}
我不明白这里发生了什么!看起来新数据只是自动索引的!这根本不是我想要的。
我甚至试过
POST /_reindex
{
"source": {
"index": "oldindex",
"type": ["testtype"]
},
"dest": {
"index": "newindex",
"type": ["test"]
}
}
但现在我得到
{
"error": "org.elasticsearch.ElasticsearchParseException: Unknown array field [type]"
}
我做错了什么?我不能使用弹性转储或背包,因为它们是第三方插件。
您就快到了。
- 删除创建错误的索引:
DELETE newindex
- 创建
newindex
索引:
PUT /newindex
{
"mappings": {
"test": {
"dynamic_templates": [
{
"notanalyzed": {
"match": "*",
"path_unmatch": "data.message",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed",
"fielddata": {
"format": "disabled"
},
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
}
}
}
}
]
}
}
}
- 并使用这个稍微修改过的CCD_ 5命令:
POST /_reindex
{
"source": {
"index": "oldindex",
"type": [
"testtype"
]
},
"dest": {
"index": "newindex"
},
"script": {
"inline": "ctx._type='test'"
}
}
重要的一点是script
,您在这里告诉_reindex
API更改newindex
中文档的_type
。