我可以在 Elasticsearch 7.x 中从 get geo_point 存储 geo_shape 吗?

Posted

技术标签:

【中文标题】我可以在 Elasticsearch 7.x 中从 get geo_point 存储 geo_shape 吗?【英文标题】:Can I store geo_shape from get geo_point in Elasticsearch 7.x? 【发布时间】:2019-11-15 07:31:20 【问题描述】:

我的 ES 7.x 系统实时存储 geo_point 数据。 喜欢:


"id" : "john",
"age" : 26,
"geo" : "57.233, 129.11"
"address" : "Rovert Hall"

我想自动存储geo_shape 数据,实时获取这些存储的geo_point 数据。

然后,使用id 查询并获取geo_shape 数据以生成polygon。我怎样才能使它成为可能? 如果不可能,我想得到任何类似这个目的的建议。

【问题讨论】:

【参考方案1】:

实现此目的的一种方法是利用script 摄取处理器并动态创建geo_shapePoint 类型)。

首先创建管道:

PUT _ingest/pipeline/point-to-shape

    "processors": [
      
        "script": 
          "source": """
           def latLon = /,/.split(ctx.geo);
           ctx.shape = [
             "type" : "point",
             "coordinates" : [latLon[1], latLon[0]]
           ];
          """
        
      
    ]

然后我们为您的文档编制索引,只需引用该管道,如下所示:

PUT index/_doc/1?pipeline?point-to-shape

  "id" : "john",
  "age" : 26,
  "geo" : "57.233, 129.11",
  "address" : "Rovert Hall"

然后生成的文档将是:

     
      "geo" : "57.233, 129.11",
      "address" : "Rovert Hall",
      "shape" : 
        "coordinates" : [
          " 129.11",
          "57.233"
        ],
        "type" : "point"
      ,
      "id" : "john",
      "age" : 26
    

PS:您还需要确保您的索引具有 shape 字段,该字段具有正确的 geo_shape 映射类型。

【讨论】:

也许这不是我的情况。我想用堆叠的geo_shape 数据制作多边形。 哦,你的意思是要从多个文档中索引的多个点构建一个多边形? 是的,我的意思是使用 user_id 从多个文档制作多边形 您能解释一下如何索引您的文档吗? 您可以使用 Logstash aggregate 过滤器。

以上是关于我可以在 Elasticsearch 7.x 中从 get geo_point 存储 geo_shape 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes上的Elasticsearch 7.x设置

Elasticsearch 7.X 拼音分词器 pinyin 使用

Elasticsearch 7.x从入门到精通

Elasticsearch 7.x Nested 嵌套类型查询 ES 干货

在这种情况下,如何将 mongoDB 的地理点数据转换为 Elasticsearch 7.x?

Elasticsearch 7.X RESTful 风格 索引文档映射操作