我们有一个索引,一个类型,客户端/客户端,客户端可以在父子层次结构中自引用(但不使用ES父子,因为它不支持自引用结构)。 />
我们正在考虑使用嵌套,但层次结构可能是无穷无尽的,这使得嵌套查询有点麻烦,甚至可能不可能。
我们想要找到的主要是所有顶层父项,因此我们通过过滤/搜索没有父项引用的所有元素(具有父ID的简单术语值)来构建searchQuery。此外,我们保存对该元素内的每个元素子元素的引用,子元素ID列表,以便我们可以在用户看到该元素时在前端执行后续请求,以进行分层可视化。
然而,令我们头疼的是:我们如何在没有后期处理的情况下找到父母WASN&T; T,即孤儿的子元素,以便他们在这个过程中不会迷路?因为上述查询,如果搜索查询仅匹配子元素,则查找每个查找自己的子级的顶级父级都不起作用。我们唯一的想法是为此做第二次请求,但这会破坏分数排序。我们一直在玩弄很多想法,但却没有找到针对这个问题的一个请求弹性搜索解决方案。有这样的事吗?
我们的数据如下所示,但当然我们可以在每个元素中保存整个树。问题是,哪种方法最好。
"hits": {
"total": 5,
"max_score": 1,
"hits": [
{
"_index": "clientsv3",
"_type": "client",
"_id": "5",
"_score": 1,
"_source": {
"name": "Client 2 sub2",
"country": "Belgium",
"parentId": 2
}
},
{
"_index": "clientsv3",
"_type": "client",
"_id": "2",
"_score": 1,
"_source": {
"name": "Client 2",
"country": "France",
"children": [
3,
5
]
}
},
{
"_index": "clientsv3",
"_type": "client",
"_id": "4",
"_score": 1,
"_source": {
"name": "Client 2 sub sub",
"country": "Germany",
"parentId": 3
}
},
{
"_index": "clientsv3",
"_type": "client",
"_id": "1",
"_score": 1,
"_source": {
"name": "Client 1",
"country": "Germany"
}
},
{
"_index": "clientsv3",
"_type": "client",
"_id": "3",
"_score": 1,
"_source": {
"name": "Client 2 sub",
"country": "Germany",
"children": [
4
],
"parentId": 2
}
}
]
}