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

Elasticsearch字段运算查询:筛选field1-field2>50的文档方法

Elasticsearch 字段差值筛选问题解答

你的查询语句存在兼容性问题:filtered查询在Elasticsearch 2.x版本之后已被弃用,现在官方推荐使用bool查询结合filter子句的方式实现筛选逻辑。

正确的查询语句(适用于Elasticsearch 5.x及以上版本)

{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "doc['field1'].value - doc['field2'].value > 50",
            "lang": "painless"
          }
        }
      }
    }
  }
}

注意事项

  • 确保你的Elasticsearch允许使用动态脚本:默认情况下动态脚本可能被禁用,需要在elasticsearch.yml配置文件中添加或修改以下配置:
    script.allowed_types: inline
    script.allowed_contexts: filter
    
    修改后需要重启Elasticsearch生效。
  • 如果字段存储的是非数值类型(比如字符串格式的数字),需要在脚本中先做类型转换,例如:
    "source": "(doc['field1'].value as long) - (doc['field2'].value as long) > 50"
    

旧版本兼容(Elasticsearch 1.x-2.x)

如果你的集群还在使用较旧的版本,原来的filtered查询可以正常工作,但官方已不再维护该语法,建议尽快升级:

{
  "filtered": {
    "filter": {
      "script": {
        "script": "doc['field1'].value - doc['field2'].value > 50"
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:45:13