按找到的文档中的字段分组

Group by field in found document

解释我想要完成的事情的最好方法是举例。

假设我有一个包含字段 namecolor 以及 transaction_id 的对象。我想搜索 namecolor 匹配指定值的文档,并且我可以使用布尔查询轻松完成。 但是,我不想要只使用搜索查询找到的文档。我还想要那些文档所属的事务,并且用 transaction_id 指定。例如,如果找到 transaction_id 等于 123 的文档,我希望查询 return 所有 transaction_id 等于 123 的文档。

当然,我可以用两个查询来做到这一点,第一个查询获取所有符合条件的文档,第二个查询 return 找到具有 transaction_id 值之一的所有文档在第一次查询中。 但是有什么方法可以在单个查询中完成吗?

您可以在事务和您的对象之间使用父子关系。或者嵌套非规范化数据以在交易中包含 objects。否则,您将不得不进行应用程序端连接,这意味着 2 个查询。

尝试类似于以下的索引映射,并在 objects 中包含一个 parent_id

{
  "mappings": {
    "transaction": {},
    "object": {
      "_parent": {
        "type": "transaction" 
      }
    }
  }
}

延伸阅读: https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child-mapping.html