让我分解一下这个问题需要花费一些时间。
请考虑您在系统中有一个实体A, B, C
。
A
是一切的父母B
是A
的孩子C
可以是A
或B
的子代,请注意还有更多的实体,例如D,E,F
与C
相同。因此,让我们暂时只考虑C
所以基本上它是像树一样的结构
```
A
/ \
/ \
B C(there are similar elements like D, E, F)
|
|
C
```
现在,我们需要使用Elastic Search
作为辅助数据库来存储它。在数据库中,由于A, B, C
具有动态字段,因此结构是完全不同的,因此它们是不同的表,我们将它们结合起来以获取数据,但是从业务角度来看,这是设计。
现在,当我们尝试将其放平并存储在es中时,
我们有一个实体A1,它有2个孩子C1和B1,B1还有其他孩子C2
1 A1空null 2 A1空C1 3 A1 B1空 4 A1 B1 C2
现在您可以查询什么
A1
,因此添加一些null删除规则,我们可以给他第2、3、4行现在是问题集,现在用户说他想要所有A
,其中A的值为A1
,因此基本上我们将向他返回所有行1,2,3,4或2,3,4,所以我们将看到类似
A1 A1 A1
但是从逻辑上讲,他应该只看到一列A1
,因为那只是唯一的值。由于ES
没有能力group by
。
那么我们如何解决问题。
A and B
,A or B and C
的索引。但是我们有更多元素,因此可以创建5个索引。因此,为解决此问题,我们开始寻找其他选项,并且正在测试cratedb
。但是首先,我们仍在尝试找出ES中是否可以执行此操作,因为需要使用ES的许多功能,例如percolation
,watcher
等。对此有任何线索吗?
也请注意,我们也需要应用分页。这就是为什么单个嵌套索引不起作用