一架梯子,一头程序猿,仰望星空!

Elasticsearch geo_shape地理形状搜索


当索引的字段类型定义为geo_shape之后,我们就可以通过geo_shape实现图形搜索。

1.图形搜索类型

下面是geo_shape支持的图形搜索类型:

  • intersects - 查询的形状与索引的形状有重叠(默认), 即图形有交集则匹配。
  • disjoint - 查询的形状与索引的形状完全不重叠。
  • within - 查询的形状包含索引的形状。

2.图形搜索例子

GET /example/_search
{
    "query":{
        "bool": { // 布尔组合查询语句
            "must": {
                "match_all": {} // 这里设置其他查询条件,直接匹配全部文档
            },
            "filter": { // 地理信息搜索,通常不参与相关性计算,所以使用filter包裹起来
                "geo_shape": { // geo_shape搜索语句
                    "location": { // 图形数据存储在location字段
                        "shape": { // 设置我们想要通过什么形状去搜索location存储的图形数据
                            "type": "envelope", // 设置图形类型为envelope,表示矩形,各种图形格式参考下面提示
                            "coordinates" : [[13.0, 53.0], [14.0, 52.0]] // 设置矩形的坐标
                        },
                        "relation": "within" // 设置图形搜索类型,这里设置为包含关系
                    }
                }
            }
        }
    }
}

这个例子表达的意思是:使用一个矩形去搜索location字段值,返回包含在这个矩形范围内的所有文档。

geo_shape支持我们使用一个图形(点、线、圆、多边形等等)去匹配存储在文档中的图形数据。

提示:geo_shape在query语句中各种图形的格式和参数,请参考geo_shape存储格式,他们的格式是一样的,这里就不在重复介绍了。