匹配与边界框相交的geo_point和geo_shape值。

示例

假设以下文档被索引:

PUT /my_locations
{"mappings": {"properties": {"pin": {"properties": {"location": {"type": "geo_point"}}}}}
}PUT /my_locations/_doc/1
{"pin": {"location": {"lat": 40.12,"lon": -71.34}}
}PUT /my_geoshapes
{"mappings": {"properties": {"pin": {"properties": {"location": {"type": "geo_shape"}}}}}
}PUT /my_geoshapes/_doc/1
{"pin": {"location": {"type" : "polygon","coordinates" : [[[13.0 ,51.5], [15.0, 51.5], [15.0, 54.0], [13.0, 54.0], [13.0 ,51.5]]]}}
}

使用geo_bounding_box筛选器匹配与边界框相交的geo_point值。要定义方框,请提供两个对角的地理点值。

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": {"lat": 40.73,"lon": -74.1},"bottom_right": {"lat": 40.01,"lon": -71.12}}}}}}
}

使用相同的过滤器匹配与边界框相交的geo_shape值:

GET my_geoshapes/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": {"lat": 40.73,"lon": -74.1},"bottom_right": {"lat": 40.01,"lon": -71.12}}}}}}
}

要匹配geo_point和geo_shape值,搜索这两个索引:

GET my_locations,my_geoshapes/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": {"lat": 40.73,"lon": -74.1},"bottom_right": {"lat": 40.01,"lon": -71.12}}}}}}
}

查询选项

选项 说明
_name 可选名称字段来标识过滤器
validation_method 设置为IGNORE_MALFORMED以接受无效纬度或经度的地理点,设置为COERCE也试图推断正确的纬度或经度。(默认是STRICT)。

支持的格式

就像geo_point类型可以接受geo点的不同表示方式一样,过滤器也可以接受它:

lat lon作为属性

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": {"lat": 40.73,"lon": -74.1},"bottom_right": {"lat": 40.01,"lon": -71.12}}}}}}
}

lat lon作为数组

格式为[lon, lat],注意,这里的lon/lat的顺序是为了符合GeoJSON。

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": [ -74.1, 40.73 ],"bottom_right": [ -71.12, 40.01 ]}}}}}
}

lat lon作为字符串

格式为lat,lon。

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": "40.73, -74.1","bottom_right": "40.01, -71.12"}}}}}
}

wkt

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"wkt": "BBOX (-74.1, -71.12, 40.73, 40.01)"}}}}}
}

geohash

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top_left": "dr5r9ydj2y73","bottom_right": "drj7teegpus6"}}}}}
}

当geohash用于指定边界框的边界时,geohash被视为矩形。边界框的定义方式是,它的左上角对应于top_left参数中指定的geohash的左上角,它的右下角定义为bottom_right参数中指定的geohash的右下角。

为了指定与geohash的整个区域匹配的边界框,可以在top_left和bottom_right参数中指定geohash:

GET my_locations/_search
{"query": {"geo_bounding_box": {"pin.location": {"top_left": "dr","bottom_right": "dr"}}}
}

在本例中,geohash dr将生成边界框查询,其左上角为45.0,-78.75,右下角为39.375,-67.5。

顶点

边界框的顶点可以通过top_left和bottom_right或top_right和bottom_left参数设置。更多的名字,支持topLeft, bottomRight, topRight和bottomLeft。可以使用简单的名称top、left、bottom和right分别设置值,而不是成对设置值。

GET my_locations/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"pin.location": {"top": 40.73,"left": -74.1,"bottom": 40.01,"right": -71.12}}}}}
}

多位置文档

过滤器可以处理每个文档的多个位置/点。一旦一个位置/点匹配过滤器,该文档将被包含在过滤器中

忽略未映射的

当ignore_unmapped选项设置为true时,将忽略未映射字段,并且不会匹配此查询的任何文档。这在查询可能具有不同映射的多个索引时很有用。当设置为false(默认值)时,如果该字段没有映射,查询将抛出异常。

精度说明

地理点的精度有限,在索引时间内总是四舍五入。在查询期间,边界框的上边界向下舍入,而下边界向上舍入。因此,由于舍入误差,沿下界(边界框的底部和左侧边缘)的点可能不会进入边界框。与此同时,查询可能会选择上界(顶部和右侧边缘)旁边的点,即使它们位于边缘之外。四舍五入误差应在纬度上小于4.20 -8度,在经度上小于8.39 -8度,即使在赤道上也小于1cm误差。

地理形状也有有限的精度,由于四舍五入。沿着边界框底部和左边边缘的Geoshape边缘可能不匹配一个geo_bounding_box查询。Geoshape边缘略偏在盒子顶部和右边边缘可能仍然匹配查询。

geo_bounding_box查询相关推荐

  1. ElasticSearch查询学习笔记章节5——geo_distance,geo_bounding_box,geo_polygon地图检索geo查询

    ElasticSearch查询笔记目录   涉及的常用查询内容较多,将分多个章节进行笔记整理,具体如下: ElasticSearch查询学习笔记章节1--term,terms,match,id查询   ...

  2. 微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游

    分布式搜索引擎01 -- elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是 ...

  3. days05-DSL查询文档以及对搜索结果进行处理

    一. DSL查询文档 1. DSL查询分类 DSL Query的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific  Language)来定义查询.常见的查询类 ...

  4. Elasticsearch 基于地理位置的搜索查询

    ES为用户提供了基于地理位置的搜索功能.它主要支持两种类型的地理查询:一种是地理点(geo_point),即经纬度查询,另一种是地理形状查询(geo_shape),即支持点,线,圆形和多边形等查询. ...

  5. Elasticsearch - DSL 查询语句

    文章目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.总结 1.3.精准查询 1.3.1.term查询 1.3.2.ran ...

  6. Elasticsearch-常用的查询

    在上一节中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能.但elasticsearch最擅长的还是搜索和数据分析. 所以今天,我们研究下elas ...

  7. 【微服务】DSL查询文档

    elasticsearch的查询依然是基于JSON风格的DSL来实现的. 1 DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来 ...

  8. 微服务11_ES:DSL/RestClient查询文档

    微服务11_ES:DSL/RestClient查询文档 一.DSL查询文档 1.DSL Query的分类 1.全文检索查询 match查询示例: multi_match查询示例: 2.精准查询 ter ...

  9. HM-SpringCloud微服务系列6.1【DSL查询文档】

    1 DSL查询分类 1.1 DSL Query的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询.常见的查询类型包括: 查询所有 ...

最新文章

  1. Java核心技术点之多线程2
  2. 开源免费的C/C++网络库(c/c++ sockets library)
  3. 告诉SEO初学者:百度收录并非终极目标
  4. No toolchains found in the NDK toolchains folder for ABI with prefix: aarch64-linux-android
  5. 95-910-330-源码-FlinkSQL-Calcite-Flink结合Calcite
  6. 纽约人寿CEO加入NYDIG董事会
  7. PHP第三方登录—OAuth2.0协议
  8. 微型计算机课程设计电子密码锁,《微机原理及应用》课程设计基于74LS112的电子密码锁设计报告初版...
  9. 常用计算机储存设备有哪些,计算机的存储设备有哪些
  10. Java笔记 - 黑马程序员_06(Stream,字节流,字符流,对象流(序列化流),属性集(Properties))
  11. 编译原理(第四版)胡元义第三章部分习题答案(2)
  12. 电脑怎么用c语言写丘比特,C语言丘比特#includebr/#includebr/ 爱问知识人
  13. 系统平台商家如何快速提升店铺的搜索流量
  14. 父进程退出,保证子进程交由init。
  15. c#键盘事件代码keychar
  16. JS实现复制粘贴的方式
  17. 大数据中位数怎么运算_大数据查找中位数
  18. 虚构故事(1):Tomcat公司之恋
  19. 帆软堆积柱形图标签显示汇总值,标签写js,树形图系列展示汇总值占比
  20. mysql连接错误码1040,mySQL错误1040:太多连接

热门文章

  1. sql查询20公里以内的数据
  2. html颜色深黑,高冷发色发型图片 深黑系暗灰色很适合
  3. 网络篇 RIP的身份验证-25
  4. 解决Ubuntu Nvidia-smi的错误“NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver”
  5. Google 内部的 Python 代码风格指南(译)
  6. 损失函数——感知损失(Perceptual Loss)
  7. 网络图片加载时显示loading
  8. Android弹出多选框设计
  9. TypeScript--笔记二(Map对象、联合类型、接口)
  10. js根据文件后缀判断文件类型