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

Elasticsearch:按嵌套字段总和+公司名通配符筛选用户文档

Elasticsearch 动态查询:筛选符合累计工作时长条件的用户

我们需要从包含多段工作经历的用户文档中,筛选出在公司名称匹配通配符*name*的企业中累计工作时长≥50个月的用户。

核心查询DSL

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "work_experiences",
            "query": {
              "wildcard": {
                "work_experiences.company": "*name*"
              }
            },
            "inner_hits": {}
          }
        },
        {
          "script": {
            "script": {
              "source": """
                int totalDuration = 0;
                for (int i = 0; i < doc['work_experiences.company'].length; i++) {
                  String companyName = doc['work_experiences.company'][i].value;
                  if (companyName =~ /.*name.*/) {
                    totalDuration += doc['work_experiences.duration'][i].value;
                  }
                }
                return totalDuration >= 50;
              """,
              "lang": "painless"
            }
          }
        }
      ]
    }
  }
}

关键部分说明

  • 嵌套查询(nested):由于work_experiences是嵌套数组类型,必须通过nested查询定位到数组内符合公司名称条件的条目,inner_hits可返回匹配的具体工作经历,便于结果验证。
  • Painless脚本筛选:遍历用户的所有工作经历,用正则表达式匹配符合*name*规则的公司,累加对应工作时长,最终判断总和是否达到50个月的要求。

注意事项

  1. 字段映射要求:确保work_experiences字段的映射为nested类型,若当前不是,需先更新索引映射:
PUT /your_user_index/_mapping
{
  "properties": {
    "work_experiences": {
      "type": "nested"
    }
  }
}
  1. 性能优化:通配符前缀*name*的查询性能较差,数据量较大时,建议改用match_phrase_prefix或调整分词策略,避免全量扫描。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:43:26