Elasticsearch:使用 Point 和 Shape 字段类型

地理处理 Elasticsearch 的强大功能用于为大量应用程序提供功能。 但是,它有一个限制:它仅适用于世界坐标。使用 pointshape 类型,X-Pack 将地理功能扩展到每个二维平面坐标系。此用例的常见场景包括映射和记录建筑物坐标以及检查文档是否在形状内。

在我之前的文章 “Elasticsearch:如何制作 GeoJSON 文件并进行地理位置搜索”,我展示了如何制作 GeoJSON 并对地理位置进行搜索。在今天的文章中,我将使用另外一种方法来展示地理位置搜索。更多搜索,请参阅 “Elasticsearch:使用 Elasticsearch 进行地理位置搜索”。

我们想使用 Elasticsearch 在我们的商店中映射设备的坐标。 为此,请按照以下步骤操作:

1) 要创建用于存储设备及其位置的索引,我们将使用以下映射:

PUT test-point
{
  "mappings": {
    "properties": {
      "device": {
        "type": "keyword"
      },
      "location": {
        "type": "point"
      }
    }
  }
}

2)现在,我们可以存储一些包含我们设备数据的文档:

PUT test-point/_bulk
{"index":{"_index":"test-point","_id":"1"}}
{"device":"device1","location":{"x":10,"y":10}}
{"index":{"_index":"test-point","_id":"2"}}
{"device":"device2","location":{"x":10,"y":15}}
{"index":{"_index":"test-point","_id":"3"}}
{"device":"device3","location":{"x":15,"y":10}}

此时,我们想在我们的商店中创建形状,以便我们可以将其分成几部分并检查人员/设备是否在定义的形状内。 为此,请按照下列步骤操作:

1)首先,让我们创建一个索引来存储我们的形状:

PUT test-shape
{
  "mappings": {
    "properties": {
      "room": {
        "type": "keyword"
      },
      "geometry": {
        "type": "shape"
      }
    }
  }
}

2)现在,我们可以存储一个文档来测试映射:

POST test-shape/_doc/1
{ 
  "room": "hall",
  "geometry": {
    "type": "polygon",
    "coordinates": [
       [ [8.0, 8.0], [8.0, 12.0], [12.0, 12.0], [12.0,8.0], [8.0, 8.0] ] 
    ] 
  }
}

3)现在,让我们以我们存储的形状搜索我们的设备:

POST test-point/_search
{
  "query": {
    "shape": {
      "location": {
        "indexed_shape": {
          "index": "test-shape",
          "id": "1",
          "path": "geometry"
        }
      }
    }
  }
}

这个相当如下的搜索:

 

在上图中,A->B->C->D->A 这个形状是我们的 shape,而  E,F,G 三个点是在索引 test-point 里定义的三个文档所处的位置。显然针对上面的 test-point 的搜索,只有 E 点在 shape 之内。上面的搜索的好处是,我们可以随时更改 test-shape 里的形状而使用同样的一个搜索来进行。它可以关联两个索引。

Pointshape 类型用于管理文档中每种类型的二维平面坐标系。 它们的用法类似于 geo_pointgeo_shape
在 Elasticsearch 中存储形状的优势在于,你可以简化匹配坐标和形状之间约束的方式。 这在我们的查询示例中得到了展示,我们从 test-shape 索引加载了形状的几何图形,并从 test-point 索引进行搜索。我们可以使用不同 shape 来对同样一个 point 索引来进行不同的搜索。

管理坐标系和形状是一个非常大的话题,需要了解形状类型和地理模型,因为它们与数据模型密切相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值