是否可以找到文档所在的 elasticsearch 分片?

Is it possible to find which elasticsearch shard(s) a document is on?

我在调试 parent child 关系查询时遇到问题。我想知道调试问题的方法,而不是简单地发布我的映射、数据、查询并询问问题所在(但我最终保留这样做的权利!)。

为此,首先要检查我的 children 和关联的 parent 是否在同一个分片上。我不信任我的映射,并且我不想使用 shard = hash(routing) % number_of_primary_shards 来计算文档理论上在哪个分片上。我想要一个 returns 明确答案的查询。

在您的查询中,您可以启用解释标志,它会告诉您每个文档来自哪个分片和节点。 您可以找到如下示例查询 -

{
  "explain": true,
  "query": {
    "match_all": {}
  }
}

除了 docID 、索引名称和类型名称,它还会发出节点 ID 和分片 ID。

您可以找到有关 explain API here.

用法的示例

要对此进行调试,您根本不必检查分片和节点标识符。

您所要做的就是确保子文档的 _parent and/or _routing 字段与父文档的 id 匹配。使用 /_search?pretty&fields=_parent,_routing&_source=true 显示这些字段。

要查找具有特定 _routing_parent id 的文档,只需使用 /_search?pretty&fields=_parent,_routing&_source=true&q=id:123 OR _routing:123 OR _parent:123 这将找到父文档 子文档。