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

如何在Elasticsearch SQL中结合使用地理范围查询与匹配查询?

Elasticsearch SQL 联合名称匹配与地理范围筛选

要同时实现名称匹配“abc”和地理范围筛选,直接在SQL中用AND连接两个条件即可,Elasticsearch SQL支持全文匹配函数MATCH和地理空间函数的组合使用,以下是两种常见场景的示例:

场景1:筛选边界框内的数据

如果你的地理字段是geo_point类型,要筛选某个经纬度边界框内的结果,使用GEO_BOUNDING_BOX函数:

SELECT *
FROM your_index_name
WHERE MATCH(name, 'abc')
  AND GEO_BOUNDING_BOX(location, 40.712, -74.227, 34.052, -118.243)

参数说明:

  • location:你的地理字段名(需为geo_point类型)
  • 四个数值依次是:左上角纬度、左上角经度、右下角纬度、右下角经度

场景2:筛选多边形区域内的数据

如果需要匹配自定义多边形范围,使用GEO_INTERSECTS结合GEO_POLYGON构造区域:

SELECT *
FROM your_index_name
WHERE MATCH(name, 'abc')
  AND GEO_INTERSECTS(location, GEO_POLYGON('POLYGON((-73.985 40.748, -73.985 40.738, -73.975 40.738, -73.975 40.748, -73.985 40.748))'))

参数说明:

  • GEO_POLYGON内的字符串是WKT格式的多边形坐标,需遵循闭合多边形规则(首尾坐标一致)
  • 坐标格式为经度 纬度,多个坐标对用逗号分隔

注意事项

  • 确保你的地理字段已经映射为geo_point或geo_shape类型,否则地理函数无法生效
  • 如果需要更精确的全文匹配(比如短语匹配),可以把MATCH(name, 'abc')改成MATCH(name, '"abc"')(用双引号包裹实现短语匹配)
  • 替换your_index_name为你实际的索引名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:11:01