是否可以找到文档所在的 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
这将找到父文档 和 子文档。
我在调试 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
这将找到父文档 和 子文档。