如何在Elasticsearch的父映射和子映射中禁用路由?

时间:2012-12-24 07:53:03

标签: elasticsearch

我已明确禁用我的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"
  }
}

所以它给我留下了以下问题:

  1. 如果在父/子映射中没有必要的要求,我该如何禁用路由?
  2. 如果需要路由,可以在不唯一的字段上进行路由吗?

1 个答案:

答案 0 :(得分:3)

子文档必须与父文档存储在同一个分片中。这就是为什么需要为子文档路由的原因。默认情况下,文档按其id值路由,因此子文档使用父ID进行路由。你可以改变它。只要父母和他们的孩子使用相同的路由值,你应该没事。路由字段不必是唯一的,但为了获得良好的性能,它应该或多或少地均匀分布。否则,您最终可能会在一个分片中记录大量记录,而在另一个分片中只记录少量记录。