3

我已为我的 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. 如果需要路由,是否可以在不唯一的字段上进行路由?
4

1 回答 1

3

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

于 2012-12-24T14:20:04.850 回答