来自关系数据库的背景知识,我想知道是否有一种方法可以检索两个索引之间唯一关联的数量。
基本示例(使用关系数据库)
我有三张table:人,车,人车
person cars有两列(person\u id,car\u id)并保存人和车之间的关联数(所有权)。
在elasticsearch上,我为person和cars创建了一个索引。
要点
每次我拿到一个汽车文件,我想知道有多少人拥有这辆车(看看它有多少独特的人协会)
为了存档,我需要另一个个人汽车索引,然后必须索引所有的协会记录?有更简单的方法吗?在es中,最好的方法是什么?
我研究过聚合,但我认为这只能在单个级别(人或车)上完成,不确定。
谢谢!
1条答案
按热度按时间jexiocij1#
在elasticsearch上,我为person和cars创建了一个索引。
大多数情况下,在ElasticSearch中以非规范化的方式存储数据是有意义的,即将一对多关系定义为嵌套关系或父子关系,或者简单地定义为多值字段。
在es中,最好的方法是什么?
它取决于您的用例(父-子或嵌套或多值)。为每种类型创建单独的索引肯定会增加开销。如果您添加了您需要的其他用例和查询类型,那么只有模式可以更好地建模。
仅考虑共享用例:以下car文档将解决您的问题:
每当一个人买/卖一辆车,那么在这种情况下,汽车文件需要更新。如果汽车买卖频繁发生,你需要更新车和人如果一个人买了一辆车,那么这种类型的模型就没有什么意义了。
在这种情况下,在person doc中有car\u id是有意义的:
{“id”:1,“name”:“raj”,“cars”:[1,2,3]}
在这种情况下,我们可以使用下面的查询来获取id=3的购车人数
同样,如果共享更多的上下文,可以实现更好的建模。