在子查询中使用父文档中的字段值

时间:2020-01-23 22:18:16

标签: elasticsearch elasticsearch-7

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

1 个答案:

答案 0 :(得分:0)

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

相关问题