- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
形状字段类型
编辑形状字段类型
编辑shape
数据类型有助于索引和搜索任意的 x, y
笛卡尔形状,例如矩形和多边形。它可以用于索引和查询坐标落在二维平面坐标系中的几何图形。
您可以使用 形状查询 来查询使用此类型的文档。
映射选项
编辑与 geo_shape
字段类型类似,shape
字段映射将 GeoJSON 或 Well-Known Text (WKT) 几何对象映射到形状类型。要启用它,用户必须显式地将字段映射到形状类型。
选项 | 描述 | 默认值 |
---|---|---|
|
可选择定义如何解释多边形/多多边形的顶点顺序。此参数定义两种坐标系规则(右手或左手),每种规则可以用三种不同的方式指定。1. 右手法则: |
|
|
如果为 true,则忽略格式错误的 GeoJSON 或 WKT 形状。如果为 false(默认),则格式错误的 GeoJSON 和 WKT 形状会抛出异常并拒绝整个文档。 |
|
|
如果为 |
|
|
如果为 |
|
索引方法
编辑与 geo_shape
类似,shape
字段类型的索引方法是将几何图形分解为三角形网格,并将每个三角形作为 BKD 树中的 7 维点进行索引。提供给索引器的坐标是单精度浮点值,因此该字段保证与 Java 虚拟机提供的精度相同(通常为 1E-38
)。对于多边形/多多边形,镶嵌器的性能主要取决于定义几何图形的顶点数。
重要提示
CONTAINS
关系查询 - 对于使用 ElasticSearch 7.5.0 或更高版本创建的索引,支持将 relation
定义为 contains
的 shape
查询。
示例
编辑resp = client.indices.create( index="example", mappings={ "properties": { "geometry": { "type": "shape" } } }, ) print(resp)
response = client.indices.create( index: 'example', body: { mappings: { properties: { geometry: { type: 'shape' } } } } ) puts response
const response = await client.indices.create({ index: "example", mappings: { properties: { geometry: { type: "shape", }, }, }, }); console.log(response);
PUT /example { "mappings": { "properties": { "geometry": { "type": "shape" } } } }
此映射定义将 geometry 字段映射到形状类型。索引器对顶点值使用单精度浮点数,因此精度保证与 Java 虚拟机提供的 float
值(大约为 1E-38)的精度相同。
输入结构
编辑可以使用 GeoJSON 或 Well-Known Text (WKT) 格式表示形状。下表提供了 GeoJSON 和 WKT 到 Elasticsearch 类型的映射
GeoJSON 类型 | WKT 类型 | Elasticsearch 类型 | 描述 |
---|---|---|---|
|
|
|
单个 |
|
|
|
由两个或多个点组成的任意线。 |
|
|
|
一个闭合的多边形,其第一个和最后一个点必须匹配,因此需要 |
|
|
|
一个不连接但可能相关的点的数组。 |
|
|
|
一个单独的线串数组。 |
|
|
|
一个单独的多边形数组。 |
|
|
|
一个类似于 |
|
|
|
一个边界矩形,或包络,仅通过指定左上角和右下角点来指定。 |
对于所有类型,内部 type
和 coordinates
字段都是必需的。
在 GeoJSON 和 WKT 中,因此在 Elasticsearch 中,正确的坐标顺序是 (X, Y) 在坐标数组中。这与许多通常使用口语化的纬度、经度 (Y, X) 排序的地理空间 API(例如,geo_shape
)不同。
点是笛卡尔 x, y
空间中的单个坐标。它可能表示虚拟世界或投影空间中感兴趣的项目的位置。以下是 GeoJSON 中点的示例。
resp = client.index( index="example", document={ "location": { "type": "point", "coordinates": [ -377.03653, 389.897676 ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'point', coordinates: [ -377.03653, 389.897676 ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "point", coordinates: [-377.03653, 389.897676], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "point", "coordinates" : [-377.03653, 389.897676] } }
以下是 WKT 中点的示例
resp = client.index( index="example", document={ "location": "POINT (-377.03653 389.897676)" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'POINT (-377.03653 389.897676)' } ) puts response
const response = await client.index({ index: "example", document: { location: "POINT (-377.03653 389.897676)", }, }); console.log(response);
POST /example/_doc { "location" : "POINT (-377.03653 389.897676)" }
由两个或多个位置数组定义的 linestring
。仅指定两个点时,linestring
将表示一条直线。指定两个以上的点将创建一个任意路径。以下是 GeoJSON 中 LineString 的示例。
resp = client.index( index="example", document={ "location": { "type": "linestring", "coordinates": [ [ -377.03653, 389.897676 ], [ -377.009051, 389.889939 ] ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'linestring', coordinates: [ [ -377.03653, 389.897676 ], [ -377.009051, 389.889939 ] ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "linestring", coordinates: [ [-377.03653, 389.897676], [-377.009051, 389.889939], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "linestring", "coordinates" : [[-377.03653, 389.897676], [-377.009051, 389.889939]] } }
以下是 WKT 中 LineString 的示例
resp = client.index( index="example", document={ "location": "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'LINESTRING (-377.03653 389.897676, -377.009051 389.889939)' } ) puts response
const response = await client.index({ index: "example", document: { location: "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)", }, }); console.log(response);
POST /example/_doc { "location" : "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)" }
多边形由点列表的列表定义。每个(外部)列表中的第一个和最后一个点必须相同(多边形必须闭合)。以下是 GeoJSON 中多边形的示例。
resp = client.index( index="example", document={ "location": { "type": "polygon", "coordinates": [ [ [ 1000, -1001 ], [ 1001, -1001 ], [ 1001, -1000 ], [ 1000, -1000 ], [ 1000, -1001 ] ] ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'polygon', coordinates: [ [ [ 1000, -1001 ], [ 1001, -1001 ], [ 1001, -1000 ], [ 1000, -1000 ], [ 1000, -1001 ] ] ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "polygon", coordinates: [ [ [1000, -1001], [1001, -1001], [1001, -1000], [1000, -1000], [1000, -1001], ], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "polygon", "coordinates" : [ [ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ] ] } }
以下是 WKT 中多边形的示例
resp = client.index( index="example", document={ "location": "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))' } ) puts response
const response = await client.index({ index: "example", document: { location: "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))", }, }); console.log(response);
POST /example/_doc { "location" : "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))" }
第一个数组表示多边形的外边界,其他数组表示内部形状(“孔”)。以下是带有孔的多边形的 GeoJSON 示例
resp = client.index( index="example", document={ "location": { "type": "polygon", "coordinates": [ [ [ 1000, -1001 ], [ 1001, -1001 ], [ 1001, -1000 ], [ 1000, -1000 ], [ 1000, -1001 ] ], [ [ 1000.2, -1001.2 ], [ 1000.8, -1001.2 ], [ 1000.8, -1001.8 ], [ 1000.2, -1001.8 ], [ 1000.2, -1001.2 ] ] ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'polygon', coordinates: [ [ [ 1000, -1001 ], [ 1001, -1001 ], [ 1001, -1000 ], [ 1000, -1000 ], [ 1000, -1001 ] ], [ [ 1000.2, -1001.2 ], [ 1000.8, -1001.2 ], [ 1000.8, -1001.8 ], [ 1000.2, -1001.8 ], [ 1000.2, -1001.2 ] ] ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "polygon", coordinates: [ [ [1000, -1001], [1001, -1001], [1001, -1000], [1000, -1000], [1000, -1001], ], [ [1000.2, -1001.2], [1000.8, -1001.2], [1000.8, -1001.8], [1000.2, -1001.8], [1000.2, -1001.2], ], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "polygon", "coordinates" : [ [ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ], [ [1000.2, -1001.2], [1000.8, -1001.2], [1000.8, -1001.8], [1000.2, -1001.8], [1000.2, -1001.2] ] ] } }
以下是 WKT 中带有孔的多边形的示例
resp = client.index( index="example", document={ "location": "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))' } ) puts response
const response = await client.index({ index: "example", document: { location: "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))", }, }); console.log(response);
POST /example/_doc { "location" : "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))" }
重要提示:WKT 不强制指定顶点的特定顺序。GeoJSON 规定外多边形必须是逆时针方向,内部形状必须是顺时针方向,这与开放地理空间联盟 (OGC) 的 简单要素访问 规范中规定的顶点顺序一致。
默认情况下,Elasticsearch 期望顶点按逆时针(右手法则)顺序排列。如果数据按顺时针顺序(左手法则)提供,则用户可以更改字段映射中的 orientation
参数,或作为文档提供的参数。
以下是覆盖文档中的 orientation
参数的示例
resp = client.index( index="example", document={ "location": { "type": "polygon", "orientation": "clockwise", "coordinates": [ [ [ 1000, 1000 ], [ 1000, 1001 ], [ 1001, 1001 ], [ 1001, 1000 ], [ 1000, 1000 ] ] ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'polygon', orientation: 'clockwise', coordinates: [ [ [ 1000, 1000 ], [ 1000, 1001 ], [ 1001, 1001 ], [ 1001, 1000 ], [ 1000, 1000 ] ] ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "polygon", orientation: "clockwise", coordinates: [ [ [1000, 1000], [1000, 1001], [1001, 1001], [1001, 1000], [1000, 1000], ], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "polygon", "orientation" : "clockwise", "coordinates" : [ [ [1000.0, 1000.0], [1000.0, 1001.0], [1001.0, 1001.0], [1001.0, 1000.0], [1000.0, 1000.0] ] ] } }
以下是 GeoJSON 点列表的示例
resp = client.index( index="example", document={ "location": { "type": "multipoint", "coordinates": [ [ 1002, 1002 ], [ 1003, 2000 ] ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'multipoint', coordinates: [ [ 1002, 1002 ], [ 1003, 2000 ] ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "multipoint", coordinates: [ [1002, 1002], [1003, 2000], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "multipoint", "coordinates" : [ [1002.0, 1002.0], [1003.0, 2000.0] ] } }
以下是 WKT 点列表的示例
resp = client.index( index="example", document={ "location": "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)' } ) puts response
const response = await client.index({ index: "example", document: { location: "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)", }, }); console.log(response);
POST /example/_doc { "location" : "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)" }
以下是 GeoJSON 线串列表的示例
resp = client.index( index="example", document={ "location": { "type": "multilinestring", "coordinates": [ [ [ 1002, 200 ], [ 1003, 200 ], [ 1003, 300 ], [ 1002, 300 ] ], [ [ 1000, 100 ], [ 1001, 100 ], [ 1001, 100 ], [ 1000, 100 ] ], [ [ 1000.2, 100.2 ], [ 1000.8, 100.2 ], [ 1000.8, 100.8 ], [ 1000.2, 100.8 ] ] ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'multilinestring', coordinates: [ [ [ 1002, 200 ], [ 1003, 200 ], [ 1003, 300 ], [ 1002, 300 ] ], [ [ 1000, 100 ], [ 1001, 100 ], [ 1001, 100 ], [ 1000, 100 ] ], [ [ 1000.2, 100.2 ], [ 1000.8, 100.2 ], [ 1000.8, 100.8 ], [ 1000.2, 100.8 ] ] ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "multilinestring", coordinates: [ [ [1002, 200], [1003, 200], [1003, 300], [1002, 300], ], [ [1000, 100], [1001, 100], [1001, 100], [1000, 100], ], [ [1000.2, 100.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8], ], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "multilinestring", "coordinates" : [ [ [1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0] ], [ [1000.0, 100.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0] ], [ [1000.2, 100.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8] ] ] } }
以下是 WKT 线串列表的示例
resp = client.index( index="example", document={ "location": "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))' } ) puts response
const response = await client.index({ index: "example", document: { location: "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))", }, }); console.log(response);
POST /example/_doc { "location" : "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))" }
以下是 GeoJSON 多边形列表的示例(第二个多边形包含一个孔)
resp = client.index( index="example", document={ "location": { "type": "multipolygon", "coordinates": [ [ [ [ 1002, 200 ], [ 1003, 200 ], [ 1003, 300 ], [ 1002, 300 ], [ 1002, 200 ] ] ], [ [ [ 1000, 200 ], [ 1001, 100 ], [ 1001, 100 ], [ 1000, 100 ], [ 1000, 100 ] ], [ [ 1000.2, 200.2 ], [ 1000.8, 100.2 ], [ 1000.8, 100.8 ], [ 1000.2, 100.8 ], [ 1000.2, 100.2 ] ] ] ] } }, ) print(resp)
const response = await client.index({ index: "example", document: { location: { type: "multipolygon", coordinates: [ [ [ [1002, 200], [1003, 200], [1003, 300], [1002, 300], [1002, 200], ], ], [ [ [1000, 200], [1001, 100], [1001, 100], [1000, 100], [1000, 100], ], [ [1000.2, 200.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8], [1000.2, 100.2], ], ], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "multipolygon", "coordinates" : [ [ [[1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0], [1002.0, 200.0]] ], [ [[1000.0, 200.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0], [1000.0, 100.0]], [[1000.2, 200.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8], [1000.2, 100.2]] ] ] } }
以下是 WKT 多边形列表的示例(第二个多边形包含一个孔)
resp = client.index( index="example", document={ "location": "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))" }, ) print(resp)
const response = await client.index({ index: "example", document: { location: "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))", }, }); console.log(response);
POST /example/_doc { "location" : "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))" }
以下是 GeoJSON 几何对象集合的示例
resp = client.index( index="example", document={ "location": { "type": "geometrycollection", "geometries": [ { "type": "point", "coordinates": [ 1000, 100 ] }, { "type": "linestring", "coordinates": [ [ 1001, 100 ], [ 1002, 100 ] ] } ] } }, ) print(resp)
response = client.index( index: 'example', body: { location: { type: 'geometrycollection', geometries: [ { type: 'point', coordinates: [ 1000, 100 ] }, { type: 'linestring', coordinates: [ [ 1001, 100 ], [ 1002, 100 ] ] } ] } } ) puts response
const response = await client.index({ index: "example", document: { location: { type: "geometrycollection", geometries: [ { type: "point", coordinates: [1000, 100], }, { type: "linestring", coordinates: [ [1001, 100], [1002, 100], ], }, ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type": "geometrycollection", "geometries": [ { "type": "point", "coordinates": [1000.0, 100.0] }, { "type": "linestring", "coordinates": [ [1001.0, 100.0], [1002.0, 100.0] ] } ] } }
以下是 WKT 几何对象集合的示例
resp = client.index( index="example", document={ "location": "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))" }, ) print(resp)
response = client.index( index: 'example', body: { location: 'GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))' } ) puts response
const response = await client.index({ index: "example", document: { location: "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))", }, }); console.log(response);
POST /example/_doc { "location" : "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))" }
包络
编辑Elasticsearch 支持 envelope
类型,该类型由形状的左上角和右下角点的坐标组成,以 [[minX, maxY], [maxX, minY]]
格式表示边界矩形。
resp = client.index( index="example", document={ "location": { "type": "envelope", "coordinates": [ [ 1000, 100 ], [ 1001, 100 ] ] } }, ) print(resp)
const response = await client.index({ index: "example", document: { location: { type: "envelope", coordinates: [ [1000, 100], [1001, 100], ], }, }, }); console.log(response);
POST /example/_doc { "location" : { "type" : "envelope", "coordinates" : [ [1000.0, 100.0], [1001.0, 100.0] ] } }
以下是使用 WKT BBOX 格式的包络示例
注意:WKT 规范期望以下顺序:minLon、maxLon、maxLat、minLat。
resp = client.index( index="example", document={ "location": "BBOX (1000.0, 1002.0, 2000.0, 1000.0)" }, ) print(resp)
const response = await client.index({ index: "example", document: { location: "BBOX (1000.0, 1002.0, 2000.0, 1000.0)", }, }); console.log(response);
POST /example/_doc { "location" : "BBOX (1000.0, 1002.0, 2000.0, 1000.0)" }
排序和检索索引形状
编辑由于形状的输入结构和索引表示复杂,目前无法对形状进行排序或直接检索其字段。shape
值只能通过 _source
字段检索。