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

Elasticsearch查询:如何筛选嵌套对象最新日期字段值大于X的文档

需求一:筛选最新期财务报告中cash>200000的公司

要实现这个查询,需针对financials嵌套字段,结合脚本判断当前条目是否为该公司的最新报告,同时满足现金条件。以下是可行的查询语句:

{
  "query": {
    "nested": {
      "path": "financials",
      "query": {
        "bool": {
          "filter": [
            {
              "script": {
                "script": """
                  def maxDate = doc['financials.periodEndDate'].stream().map(d -> d.getValue()).max().get();
                  return doc['financials.periodEndDate'].getValue().equals(maxDate) && doc['financials.cash'].value > 200000;
                """
              }
            }
          ]
        }
      },
      "inner_hits": {
        "size": 1,
        "sort": [{"financials.periodEndDate": "desc"}]
      }
    }
  }
}
  • nested查询确保在同一个嵌套对象范围内匹配日期和现金数据,避免跨条目匹配的问题。
  • 脚本先计算当前公司所有财务报告的最新日期,再验证当前条目是否为该日期且cash>200000。
  • inner_hits用于返回匹配的具体财务条目,便于结果校验。

需求二:筛选倒数第二个最新日期的财务报告

要定位倒数第二个日期的财务报告,需先提取并排序公司的所有报告日期,再匹配对应条目。查询语句如下:

{
  "query": {
    "nested": {
      "path": "financials",
      "query": {
        "bool": {
          "filter": [
            {
              "script": {
                "script": """
                  def dates = doc['financials.periodEndDate'].stream().map(d -> d.getValue()).sorted().collect(Collectors.toList());
                  if (dates.size() < 2) {
                    return false;
                  }
                  def secondLastDate = dates.get(dates.size() - 2);
                  return doc['financials.periodEndDate'].getValue().equals(secondLastDate);
                """
              }
            }
          ]
        }
      },
      "inner_hits": {
        "size": 1,
        "sort": [{"financials.periodEndDate": "desc"}]
      }
    }
  }
}
  • 脚本提取当前公司的所有periodEndDate并排序,若报告数量不足2则直接排除。
  • 取出排序后列表的倒数第二个日期,匹配当前嵌套条目的日期即可。
  • inner_hits返回对应的倒数第二个报告条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:38:30