当前位置: 首页 > news >正文

Elasticsearch:Geoshape query

Geoshape 查询可以用于过滤使用 geo_shape 或 geo_point 类型索引的文档。

geo_shape 查询使用与 geo_shape 或 geo_point 映射相同的索引来查找具有与查询形状相关的形状的文档,并使用指定的空间关系:相交(intersect)、包含(contained)、包含(within)或不相交 (disjoin)。

该查询支持两种定义查询形状的方法,一种是提供整个形状定义,另一种是引用在另一个索引中预先索引的形状的名称。 下面通过示例定义了这两种格式。

内联形状定义

与 geo_point 类型类似,geo_shape 查询使用 GeoJSON 来表示形状。有关如何制作 GeoJSON,请参考我的另外一篇文章 “Elasticsearch:如何制作 GeoJSON 文件并进行地理位置搜索”。

sample.json

{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"type": "Polygon","coordinates": [[[ 13.0,52.0 ],[14.0,52.0],[14.0,53.0],[13.0,53.0],[13.0,52.0]  ]]}}
]
}

给定以下索引,其中位置作为 geo_shape 字段:

PUT /example
{"mappings": {"properties": {"location": {"type": "geo_shape"}}}
}POST /example/_doc?refresh
{"name": "Wind & Wetter, Berlin, Germany","location": {"type": "point","coordinates": [ 13.400544, 52.530286 ]}
}

以下查询将使用 Elasticsearch 的信封 GeoJSON 扩展查找点:

GET /example/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_shape": {"location": {"shape": {"type": "envelope","coordinates": [ [ 13.0, 53.0 ], [ 14.0, 52.0 ] ]},"relation": "within"}}}}}
}

类似地,可以在 geo_point 字段上查询上述查询。

PUT /example_points
{"mappings": {"properties": {"location": {"type": "geo_point"}}}
}PUT /example_points/_doc/1?refresh
{"name": "Wind & Wetter, Berlin, Germany","location": [13.400544, 52.530286]
}

使用相同的查询,将返回具有匹配 geo_point 字段的文档。

GET /example_points/_search
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_shape": {"location": {"shape": {"type": "envelope","coordinates": [ [ 13.0, 53.0 ], [ 14.0, 52.0 ] ]},"relation": "intersects"}}}}}
}

预索引形状

该查询还支持使用已在另一个索引中建立索引的形状。 当你有预定义的形状列表并且你想要使用逻辑名称(例如 New Zealand 新西兰)引用该列表而不是每次都提供坐标时,这特别有用。 在这种情况下,只需提供:

  • id - 包含预索引形状的文档的 ID。
  • index - 预索引形状所在的索引的名称。 默认为 shapes。
  • path - 指定为包含预索引形状的路径的字段。 默认为 shape。
  • routing - 形状文档的路由(如果需要)。

以下是将过滤器与预索引形状一起使用的示例:

PUT /shapes
{"mappings": {"properties": {"location": {"type": "geo_shape"}}}
}PUT /shapes/_doc/deu
{"location": {"type": "envelope","coordinates" : [[13.0, 53.0], [14.0, 52.0]]}
}GET /example/_search
{"query": {"bool": {"filter": {"geo_shape": {"location": {"indexed_shape": {"index": "shapes","id": "deu","path": "location"}}}}}}
}

空间关系

以下是搜索地理字段时可用的空间关系运算符的完整列表:

  • INTERSECTS -(默认)返回 geo_shape 或 geo_point 字段与查询几何图形相交的所有文档。
  • DISJOINT - 返回其 geo_shape 或 geo_point 字段与查询几何图形没有任何共同点的所有文档。
  • WITHIN - 返回 geo_shape 或 geo_point 字段位于查询几何图形内的所有文档。 不支持线几何形状。
  • CONTAINS - 返回 geo_shape 或 geo_point 字段包含查询几何图形的所有文档。

忽略未映射的

当设置为 true 时,ignore_unmapped 选项将忽略未映射的字段,并且不会匹配此查询的任何文档。 当查询可能具有不同映射的多个索引时,这非常有用。 当设置为 false(默认值)时,如果字段未映射,查询将引发异常。

注意

当数据在 geo_shape 字段中作为形状数组进行索引时,这些数组将被视为一个形状。 因此,以下请求是等效的。

PUT /test/_doc/1
{"location": [{"coordinates": [46.25,20.14],"type": "point"},{"coordinates": [47.49,19.04],"type": "point"}]
}
PUT /test/_doc/1
{"location":{"coordinates": [[46.25,20.14],[47.49,19.04]],"type": "multipoint"}
}

geo_shape 查询假定 geo_shape 字段使用默认方向 RIGHT(逆时针)。 请参见 Polygon orientation。

http://www.lryc.cn/news/293039.html

相关文章:

  • 安装配置sqoop
  • 数据结构——实验01-线性表的链式存储和操作
  • 十分钟上手vue!
  • day37WEB攻防-通用漏洞XSS跨站权限维持钓鱼捆绑浏览器漏洞
  • 【Java程序设计】【C00215】基于SSM的勤工助学管理系统(论文+PPT)
  • c#的反汇编对抗
  • 设计模式之框架源码剖析(实战+图解)
  • SQL注入:sqli-labs靶场通关(1-37关)
  • 浙政钉(专有钉钉)
  • 【lesson2】定长内存池的实现
  • C++迷宫游戏详解
  • java下载网络文件
  • 大数据信用报告查询费用一般要多少钱?
  • 【操作宝典】IntelliJ IDEA新建maven项目详细教程
  • 【Java程序设计】【C00196】基于(JavaWeb+SSM)的旅游管理系统(论文+PPT)
  • pdmodel从动态模型转成静态onnx
  • git 如何修改仓库地址
  • 基于springboot篮球论坛系统源码和论文
  • 【三维重建】运动恢复结构(SfM)
  • Android Studio非UI线程修改控件——定时器软件
  • canvas的一些基础
  • C++(10)——类与对象(最终篇)
  • NetApp FAS2750 和 FAS2820 简化分布式企业的存储
  • Geogebra设置函数定义域
  • 代码随想录刷题笔记 DAY 18 | 找树左下角的值 No.513 | 路经总和 No.112 | 从中序与后序遍历序列构造二叉树 No.106
  • 【algorithm】一个简单的PID工程 base 用于手生时候快速复习 用于设计模式 cpp语法八股 快速复习校验
  • Python处理图片生成天际线(2024.1.29)
  • jsp服装穿搭推荐系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • Opencv(C++)学习 之RV1126平台的OPENCV交叉编译
  • http和https区别