0

0

Elasticsearch嵌套数组筛选:如何高效查询满足特定时间范围和数量阈值的嵌套数组记录?

花韻仙語

花韻仙語

发布时间:2025-03-01 12:58:23

|

670人浏览过

|

来源于php中文网

原创

高效筛选elasticsearch嵌套数组:基于时间范围和数量阈值的精准查询

本文介绍如何高效地使用Elasticsearch查询嵌套数组,筛选出满足特定时间范围和数量阈值的记录。假设我们的数据包含名为change_records的嵌套数组字段,每个数组元素包含change_time字段(时间戳)。目标是查询change_time在指定时间范围内,且记录数量达到指定阈值的文档。

之前的脚本查询方法存在错误,提示“no field found for [change_records] in mapping with types []”,这是因为直接使用doc['change_records']访问嵌套字段的方式不正确。change_records是数组,需要使用正确的语法访问其元素。

解决方案:使用script_score查询结合Painless脚本自定义评分逻辑。script_score为每个文档计算分数,再根据分数过滤。

以下是一个修正后的查询示例:

{
  "query": {
    "script_score": {
      "query": {
        "exists": {
          "field": "change_records"
        }
      },
      "script": {
        "source": """
          int matches = 0;
          for (int i = 0; i < doc['change_records'].length; i++) {
            long changeTime = doc['change_records'][i]['change_time'];
            if (changeTime >= params.start && changeTime <= params.end) {
              matches++;
            }
          }
          return matches >= params.n ? 1 : 0;
        """,
        "lang": "painless",
        "params": {
          "start": 1627463270000, // 开始时间戳
          "end": 1658999270000,   // 结束时间戳
          "n": 2                 // 最小匹配数量
        }
      }
    }
  }
}

此查询首先使用exists查询确认change_records字段存在。然后,script_score中的Painless脚本遍历change_records数组,统计change_time在指定范围内的元素个数。如果匹配数量大于等于params.n,则返回1(匹配);否则返回0。Elasticsearch根据分数过滤,只返回分数为1的文档。

ChartAI
ChartAI

AI驱动的图表生成工具

下载

关键改进:

  • 正确访问嵌套字段:使用doc['change_records'][i]['change_time']
  • 使用length属性:doc['change_records'].length正确获取数组长度,避免越界。
  • 清晰的评分逻辑:返回1或0,方便理解和调整。
  • 可配置参数:params参数允许灵活调整开始时间戳、结束时间戳和最小匹配数量。

通过此方法,可以高效地筛选Elasticsearch嵌套数组,满足在指定时间范围内且数量达到指定阈值的查询需求。 图片位置保持不变。

Elasticsearch嵌套数组筛选:如何高效查询满足特定时间范围和数量阈值的嵌套数组记录?

相关专题

更多
length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

920

2023.09.19

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号