我已明确禁用我的Elasticsearch(ES)映射的路由:
{
"chow-clfg": {
"_parent": {
"type": "chow-demo"
},
"_routing": {
"required": false
},
"_id": {
"path": "clfg"
},
"dynamic": "true",
"_ttl": {
"enabled": true,
"default": "1h"
},
"properties": {
"clfg": {
"analyzer": "keyword",
"type": "string"
},
"@timestamp": {
"format": "dateOptionalTime",
"type": "date"
},
"count": {
"type": "long"
}
}
}
}
执行curl命令删除并更新新映射后,我仍然在执行_cluster / state命令时启用了路由:
"mappings" : {
"chow-clfg" : {
"_id" : {
"path" : "clfg"
},
"_routing" : {
"required" : true
},
"_ttl" : {
"enabled" : true,
"default" : 3600000
},
"properties" : {
"@timestamp" : {
"format" : "dateOptionalTime",
"type" : "date"
},
"clfg" : {
"analyzer" : "keyword",
"type" : "string"
},
"count" : {
"type" : "long"
}
},
"_parent" : {
"type" : "chow-demo"
}
}
所以它给我留下了以下问题:
答案 0 :(得分:3)
子文档必须与父文档存储在同一个分片中。这就是为什么需要为子文档路由的原因。默认情况下,文档按其id值路由,因此子文档使用父ID进行路由。你可以改变它。只要父母和他们的孩子使用相同的路由值,你应该没事。路由字段不必是唯一的,但为了获得良好的性能,它应该或多或少地均匀分布。否则,您最终可能会在一个分片中记录大量记录,而在另一个分片中只记录少量记录。