我在调试父子关系查询时遇到问题。我想知道调试问题的方法,而不是简单地发布我的映射,数据,查询,并询问有什么不对(但我保留最终这样做的权利!)。
为此,一个开始就是检查我的孩子和相关父母是否在同一个分片上。我不相信我的映射,并且我不想使用 shard = hash(routing)%number_of_primary_shards 来计算理论上文档的碎片。我想要一个返回明确答案的查询。
答案 0 :(得分:5)
在您的查询中,您可以启用explain标记,它将告诉您每个文档的位置来自哪个分片和节点。 您可以按如下方式查找示例查询 -
{
"explain": true,
"query": {
"match_all": {}
}
}
除了docID,索引名称和类型名称,它还将发出节点ID和分片ID。
您可以找到有关使用说明API here的示例。
答案 1 :(得分:1)
要对此进行调试,您根本不必检查分片和节点标识符。
您所要做的就是确保子文档的_parent
和/或_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
这将找到父文档和子文档。