我有亲子关系。
我的父文档有一个名为lastRevisionId
的字段,其中存储了父文档的最新修订版的标识符。
子级文档是不可变的键/值对,描述了父级特定版本的属性。
父母
{
"_id": "parent-1",
"lastRevisionId": "rev1"
}
孩子
{
"_id": "parent-1|rev1|name",
"revisionId": "rev1",
"key": "name",
"value": "Test Server"
}
对于每个修订,我们都会为新修订编制一个新的子文档索引,因此在将Parent更新为rev2之后,我们将在ES中使用它:
父母
{
"_id": "parent-1",
"lastRevisionId": "rev2"
}
孩子
{
"_id": "parent-1|rev1|name",
"revisionId": "rev1",
"key": "name",
"value": "Test Server"
}
{
"_id": "parent-1|rev2|name",
"revisionId": "rev2",
"key": "name",
"value": "Updated Server"
}
我需要一个查询,该查询将返回子文档,其中子文档上的revisionId
等于父文档上的lastRevisionId
。
这样做的原因是,我们希望存储这些修订的历史数据,但我们也希望只能获取最新信息。从审计的角度来看,历史数据仅是真正有用的,但是最新数据将描述大量有用的当前状态。
我们正在努力避免使这些数据非规范化,因为父级的任何单个修订版都可能具有成百上千个子级文档,而每次更改都对其进行全部更新都会带来其自身的缩放问题。
如果这是SQL,查询将类似于:
SELECT c.* FROM child as c
INNER JOIN parent as p
ON p.lastRevisionId= c.revisionId
答案 0 :(得分:0)
您可以使用嵌套映射来编写查询: elastic.co/guide/en/elasticsearch/reference/current/nested.html