0

我有亲子关系。我的父文档有一个名为的字段,该字段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
4

1 回答 1

0

您可以使用嵌套映射来编写查询:elastic.co/guide/en/elasticsearch/reference/current/nested.html

于 2020-01-24T00:44:50.603 回答