Elasticsearch Reindex API 不起作用
Elasticsearch Reindex API does not work
我正在尝试将重建索引 api 用于 elasticsearch
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]"
}
我做错了什么?我不能使用 elasticdump 或 knapsack,因为它们是第 3 方插件。
你快到了。
- 删除错误创建的索引:
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"
}
}
}
}
}
]
}
}
}
- 并使用这个稍微修改过的
_reindex
命令:
POST /_reindex
{
"source": {
"index": "oldindex",
"type": [
"testtype"
]
},
"dest": {
"index": "newindex"
},
"script": {
"inline": "ctx._type='test'"
}
}
重要的一点是 script
,您告诉 _reindex
API 更改 newindex
中文档的 _type
。
我正在尝试将重建索引 api 用于 elasticsearch
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]"
}
我做错了什么?我不能使用 elasticdump 或 knapsack,因为它们是第 3 方插件。
你快到了。
- 删除错误创建的索引:
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"
}
}
}
}
}
]
}
}
}
- 并使用这个稍微修改过的
_reindex
命令:
POST /_reindex
{
"source": {
"index": "oldindex",
"type": [
"testtype"
]
},
"dest": {
"index": "newindex"
},
"script": {
"inline": "ctx._type='test'"
}
}
重要的一点是 script
,您告诉 _reindex
API 更改 newindex
中文档的 _type
。