Elasticsearch - 索引之间的关联计数?
Elasticsearch - Count of associations between indexes?
来自关系数据库背景,想知道有没有办法可以检索两个索引之间的唯一关联数。
基本示例(使用关系数据库)
我有 3 个表:Person、Cars、Person-Cars
Person-Cars 有两列 (person_id, car_id) 并保存人与车之间的关联(所有权)数量。
- 在 Elasticsearch 上,我为 Person 和 Cars 创建了一个索引。
要点
每次获取 Car 文档时,我想知道有多少人拥有这辆车(IOW 它与唯一的人有多少关联)
--
为此,我需要为 Person-Cars 建立另一个索引,然后必须为所有关联记录建立索引?有更简单的方法吗?在 ES 中执行此操作的最佳方法是什么?
我研究过聚合,但我认为这只能在一个单一的层面(人或汽车)上完成,我不确定。
谢谢!
On Elasticsearch, I have created an index for Person and for Cars.
大多数情况下,在弹性搜索中以非规范化方式存储数据是有意义的,即将 one-to-many 关系定义为 nested or parent-child 关系或简单地在 multi-value 字段中。
What would be the best way to do this in ES?
这取决于您的用例(parent-child 或嵌套或 multi-value)。为每种类型使用单独的索引肯定会增加开销。如果您添加您需要的其他用例和查询类型,那么只能更好地建模模式。
仅考虑共享用例:以下汽车文档将解决您的问题:
{
"id":1,
"brand":"Hyundai",
"owners":[21,31,51] // <===== Ids of owners. Ids & names both can be stored if required.
"owners_cnt": 3 // <==== OR You can simply maintain the counter as well.
}
每当一个人buy/sell一辆汽车,那么在这种情况下汽车文件需要更新。如果汽车的买卖经常发生,并且如果有人买了车,你需要同时更新汽车和人,那么这种建模就没有意义了。
在那种情况下,car_ids within-person doc :
是有意义的
{
“编号”:1,
“名字”:“拉吉”,
“汽车”:[1,2,3]
}
在这种情况下,我们可以使用下面的查询来获取购买汽车的人数,id=3
GET person/_count
{
"query": {
"match": {
"cars": 3
}
}
如果共享更多上下文,则可以再次实现更好的建模。
来自关系数据库背景,想知道有没有办法可以检索两个索引之间的唯一关联数。
基本示例(使用关系数据库)
我有 3 个表:Person、Cars、Person-Cars
Person-Cars 有两列 (person_id, car_id) 并保存人与车之间的关联(所有权)数量。
- 在 Elasticsearch 上,我为 Person 和 Cars 创建了一个索引。
要点
每次获取 Car 文档时,我想知道有多少人拥有这辆车(IOW 它与唯一的人有多少关联)
--
为此,我需要为 Person-Cars 建立另一个索引,然后必须为所有关联记录建立索引?有更简单的方法吗?在 ES 中执行此操作的最佳方法是什么?
我研究过聚合,但我认为这只能在一个单一的层面(人或汽车)上完成,我不确定。
谢谢!
On Elasticsearch, I have created an index for Person and for Cars.
大多数情况下,在弹性搜索中以非规范化方式存储数据是有意义的,即将 one-to-many 关系定义为 nested or parent-child 关系或简单地在 multi-value 字段中。
What would be the best way to do this in ES?
这取决于您的用例(parent-child 或嵌套或 multi-value)。为每种类型使用单独的索引肯定会增加开销。如果您添加您需要的其他用例和查询类型,那么只能更好地建模模式。
仅考虑共享用例:以下汽车文档将解决您的问题:
{
"id":1,
"brand":"Hyundai",
"owners":[21,31,51] // <===== Ids of owners. Ids & names both can be stored if required.
"owners_cnt": 3 // <==== OR You can simply maintain the counter as well.
}
每当一个人buy/sell一辆汽车,那么在这种情况下汽车文件需要更新。如果汽车的买卖经常发生,并且如果有人买了车,你需要同时更新汽车和人,那么这种建模就没有意义了。
在那种情况下,car_ids within-person doc :
是有意义的{ “编号”:1, “名字”:“拉吉”, “汽车”:[1,2,3] }
在这种情况下,我们可以使用下面的查询来获取购买汽车的人数,id=3
GET person/_count
{
"query": {
"match": {
"cars": 3
}
}
如果共享更多上下文,则可以再次实现更好的建模。