【问题标题】:How to group documents of different types according to the same matching field in Elasticsearch?Elasticsearch中如何根据相同的匹配字段对不同类型的文档进行分组?
【发布时间】:2022-01-03 17:02:10
【问题描述】:

首先,我正在使用 Spring Data Elasticsearch。

假设我有大约 10k 个文档,每个 Car 实体和 Owner 实体:

Car: {VIN, make, model, color}
Owner: {VIN, owner}

假设每辆车可以有 0 位车主。 最后,我想要一堆由匹配的汽车数据和所有者数据组成的 CarProfile 对象。

CarProfile: {VIN, make, model, color, List<String> owners}

我正在考虑两种方法:

  1. 将所有 Car 和 Owner 数据索引到 ES 中。按 VIN 对文档进行分组,遍历每个组,将每个组转换为 CarProfile 对象。
  2. 将所有所有者数据索引到 ES。遍历 Car 数据并为每辆 Car 检索任何与 VIN 匹配的 Owner 信息,然后将所有数据转换为 CarProfile 对象。

方法 1 会更方便,但我不确定这种方法是否可行。似乎聚合只能给你数据的一个子集(比如每辆车有多少车主),而不是所有的文档数据。欢迎提出任何建议。

【问题讨论】:

    标签: elasticsearch spring-data


    【解决方案1】:

    您可以检查字段折叠。 (https://www.elastic.co/guide/en/elasticsearch/reference/7.16/collapse-search-results.html)

    您可以使用以下文档模型保持文档平整。

    CarProfile: {VIN, make, model, color, owner}
    

    您可以使用如下查询按 VIN 分组,这应该会为您提供按 VIN 分组的文档及其所有字段。:

    {
        "query": {
            "match_all": {},
            "collapse": {
                "field": "VIN"
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2021-11-28
      相关资源
      最近更新 更多