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

Elasticsearch/OpenSearch如何结合geo_distance实现多字段过滤

实现方法

Elasticsearch/OpenSearch的bool.filter节点支持传入数组格式的多个过滤条件,所有条件为逻辑与关系,即必须同时满足才会返回对应文档。你只需要把原有单个geo_distance条件和新增的deposit过滤条件一起放到filter数组中,就能在保留原有5公里地理范围过滤的基础上,叠加押金字段的筛选规则。


场景1:精确匹配deposit字段值

如果需要筛选指定押金值的司机(比如押金为1500),直接使用term查询做精确匹配即可,完整查询如下:

{
  "query": {
    "bool": {
      "filter": [
        {
          "geo_distance": {
            "distance": "5km",
            "coordinate": {
              "lat": 3.131779652034938,
              "lon": 101.6846340901202
            }
          }
        },
        {
          "term": {
            "deposit": "1500"
          }
        }
      ]
    }
  }
}

场景2:按deposit数值范围过滤

如果需要按押金区间筛选(比如押金大于等于1000、小于2000),使用range查询即可。需要注意你当前索引中deposit是字符串类型存储的数值,字符串比较遵循字典序规则,如果数值长度不统一会出现结果不符合预期的问题,长期使用建议将该字段的映射修改为integer/long数值类型。范围过滤的示例查询如下:

{
  "query": {
    "bool": {
      "filter": [
        {
          "geo_distance": {
            "distance": "5km",
            "coordinate": {
              "lat": 3.131779652034938,
              "lon": 101.6846340901202
            }
          }
        },
        {
          "range": {
            "deposit": {
              "gte": "1000",
              "lt": "2000"
            }
          }
        }
      ]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:30:49