多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 在查询中使用已索引的形状 对于那些经常会在查询中使用的形状,可以把它们索引起来以便在查询中可以方便地直接引用名字。 以之前的阿姆斯特丹中央为例,我们可以把它存储为一个类型为 `neighborhood` 的文档。 首先,我们仿照之前设置 `landmark` 时的方式建立一个映射: ```json PUT /attractions/_mapping/neighborhood { "properties": { "name": { "type": "string" }, "location": { "type": "geo_shape" } } } ``` 然后我们索引阿姆斯特丹中央对应的形状: ```json PUT /attractions/neighborhood/central_amsterdam { "name" : "Central Amsterdam", "location" : { "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] ]] } } ``` 形状索引好之后,我们就可以在查询中通过 `index`, `type` 和 `id` 来引用它了: ```json GET /attractions/landmark/_search { "query": { "geo_shape": { "location": { "relation": "within", "indexed_shape": { <1> "index": "attractions", "type": "neighborhood", "id": "central_amsterdam", "path": "location" } } } } } ``` <1> 指定 `indexed_shape` 而不是 `shape`,Elasticesearch 就知道需要从指定的文档和路径检索出对应的形状了。 阿姆斯特丹中央这个形状没有什么特别的。同样地,我们也可以使用已经索引好的阿姆斯特丹达姆广场。 这个查询查找出与阿姆斯特丹达姆广场有交集的临近点: ```json GET /attractions/neighborhood/_search { "query": { "geo_shape": { "location": { "indexed_shape": { "index": "attractions", "type": "landmark", "id": "dam_square", "path": "location" } } } } } ```