ElasticSearch自引用结构,孤儿

时间:2016-07-08 07:45:29

标签: elasticsearch parent-child hierarchy

我们有一个索引,一个类型,客户端/客户端,客户端可以在父子层次结构中自引用(但不使用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
    }
  }
]

}

0 个答案:

没有答案