当索引的字段类型定义为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存储格式,他们的格式是一样的,这里就不在重复介绍了。