You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch查询最新PR中各结果首次出现对应PR号方案咨询

推荐采用第一种存储方案(单结果单文档),几乎所有计算逻辑都可以直接交给Elasticsearch完成,仅需少量查询结果拼接操作。

具体实现流程:

  1. 先查询最新的PR编号:
GET test/_search
{
  "size": 0,
  "aggs": {
    "latest_pr": {
      "max": {
        "field": "PR"
      }
    }
  }
}

按照你给出的示例,查询结果会返回最新PR为4。

  1. 拉取最新PR包含的所有结果值:
GET test/_search
{
  "query": {
    "term": {
      "PR": 4
    }
  },
  "_source": ["result"]
}

返回的结果提取后就是最新存在的结果集合:["bar", "eggs"]。

  1. 批量查询上述结果各自首次出现的最小PR编号:
GET test/_search
{
  "size": 0,
  "query": {
    "terms": {
      "result": ["bar", "eggs"]
    }
  },
  "aggs": {
    "group_by_result": {
      "terms": {
        "field": "result",
        "size": 1000 // 可根据实际结果数量调整上限
      },
      "aggs": {
        "first_appear_pr": {
          "min": {
            "field": "PR"
          }
        }
      }
    }
  }
}

聚合返回的结果会直接给出每个结果对应的首次PR编号:bar对应1,eggs对应3,完全符合你期望的输出要求。

第二种存储方案的问题:

如果采用单PR存数组的方案,实现相同需求需要用到runtime fields或者脚本聚合,性能会比第一种方案低1~2个数量级,数据量大的时候不推荐使用。

注意事项:

索引创建时需要把PR字段和result字段设置为keyword类型,避免text类型分词导致聚合异常。

内容的提问来源于stack exchange,提问作者baruchiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 16:27:01