原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/filter-by-geopoint.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/filter-by-geopoint.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/filter-by-geopoint.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
通过地理坐标点过滤edit
有四种地理坐标点相关的过滤器可以用来选中或者排除文档:
-
geo_bounding_box
- 找出落在指定矩形框中的点。
-
geo_distance
- 找出与指定位置在给定距离内的点。
-
geo_distance_range
- 找出与指定点距离在给定最小距离和最大距离之间的点。
-
geo_polygon
- 找出落在多边形中的点。 这个过滤器使用成本很高 。当你觉得自己需要使用它,应该先看看 geo-shapes 。
这些过滤器判断点是否落在指定区域时的计算方法稍有不同,但过程类似。指定的区域被转换成一系列以quad/geohash为前缀的token,并被用来在倒排索引中搜索拥有相同token的文档。
地理坐标过滤器使用成本相对较高 -- 应当在文档集合尽可能少的场景下使用。你可以先使用那些简单快捷的过滤器,比如 term
或 range
,来过滤掉尽可能多的文档,最后才交给地理坐标过滤器处理。
布尔型过滤器(bool
filter) 会自动帮你做这件事。它会优先让那些基于“位图(bitset)”的简单过滤器(见 关于缓存 )来过滤掉尽可能多的文档,然后才依次调用使用成本更高的地理坐标过滤器或者脚本类的过滤器。