原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/querying-geo-shapes.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/querying-geo-shapes.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/querying-geo-shapes.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
查询地理形状edit
geo_shape
查询不寻常的地方在于,它允许我们使用形状来做查询,而不仅仅是坐标点。
举个例子,当我们的用户刚刚迈出阿姆斯特丹中央火车站时,我们可以用如下方式,查询出方圆 1km 内的所有地标:
GET /attractions/landmark/_search { "query": { "geo_shape": { "location": { "shape": { "type": "circle", "radius": "1km", "coordinates": [ 4.89994, 52.37815 ] } } } } }
默认情况下,查询(或者过滤器 —— 做同样的工作)会从已索引的形状中寻找与指定形状有交集的部分。此外,可以把 relation
字段设置为 disjoint
来查找与指定形状不相交的部分,或者设置为 within
来查找完全落在查询形状中的。
举个例子,我们可以查找阿姆斯特丹中心区域所有的地标:
GET /attractions/landmark/_search { "query": { "geo_shape": { "location": { "relation": "within", "shape": { "type": "polygon", "coordinates": [[ [4.88330,52.38617], [4.87463,52.37254], [4.87875,52.36369], [4.88939,52.35850], [4.89840,52.35755], [4.91909,52.36217], [4.92656,52.36594], [4.93368,52.36615], [4.93342,52.37275], [4.92690,52.37632], [4.88330,52.38617] ]] } } } } }