【问题标题】:geojson to Elasticsearch : Unable to Tessellate shapegeojson 到 Elasticsearch:无法镶嵌形状
【发布时间】:2020-06-08 06:32:44
【问题描述】:

我正在将一些 geojson 文件(大约 4000 ~ 5000 个多面特征)索引到 Elasticsearch 中。

这是映射

"mappings": {
       "properties": {
      "type": {
        "type": "keyword"
      },
      "properties": {
        "type": "object"
      },
      "geometry": {
        "type": "geo_shape"
      }
       }
    }

我的索引代码如下所示:

helpers.bulk(es, k, chunk_size=500, request_timeout=1000)

索引操作(在块中)被此错误消息停止:

{'type': 'mapper_parsing_exception', 'reason': 'failed to parse field [geometry] of type [geo_shape]', 'caused_by': {'type': 'illegal_argument_exception', 'reason': 'Unable to Tessellate shape

这个错误的原因是什么?
索引geojson文件时可以忽略这个错误吗?

【问题讨论】:

  • 您能否显示您的索引映射以及导致此问题的批量文件中的一个 JSON 文档?
  • @Val 在帖子中添加
  • ...以及您的批量文件中的一个 JSON 文档
  • @Val 抱歉,我无法共享 JSON 文档。
  • 帮助我们帮助你:-)

标签: python elasticsearch geojson elasticsearch-geo-shape


【解决方案1】:

我查看了这个问题,多边形是有效的,并发现了 Lucene tessellator 中的一个错误。我打开了一个问题:

https://issues.apache.org/jira/browse/LUCENE-9417

修复就在这里:

https://github.com/apache/lucene-solr/pull/1614

【讨论】:

  • 感谢@Ignacio Vera 跟进。如何将修复应用到我当前的平台?
  • 该更改已在 Lucene 中提交,并将包含在下一个 Lucene 版本中(昨天 Lucene 分支 8.6 已删除)。我希望该修复将包含在依赖于该 Lucene 版本的下一个 Elasticsearch 版本中。
  • 谢谢@IgnacioVera 我可以看到修复现在在 ES 7.9 github.com/elastic/elasticsearch/blob/7.9/buildSrc/…
  • 嗨@IgnacioVera!我尝试了包含您的修复程序的 Elastic Search 7.9.1 docker (docker.elastic.co/elasticsearch/elasticsearch:7.9.1)。对于自相交形状,即使是没有“孔”的形状,我仍然会收到“无法镶嵌形状”的错误。这是预期的行为吗?如果我打开一个单独的问题会有帮助吗?
  • 如果多边形无效(例如,它们具有自相交的边),那么是的,这是可以预期的。我认为如果我们打开一个单独的问题会更好。
【解决方案2】:

您的 geojson 在语法上是正确且有效的。现在您只需要确保正确索引您的多面体:

PUT demo_l08_bs
{
  "mappings": {
    "properties": {
      "geometry": {
        "type": "geo_shape"
      }
    }
  }
}

索引geojson而不改变任何东西:

POST demo_l08_bs/_doc
{
  "properties": {
    ...
  },
  "geometry": {
    "type": "MultiPolygon",
    "coordinates": [...]
  }
}

验证一个点位于其中:

GET demo_l08_bs/_search
{
  "query": {
    "geo_shape": {
      "geometry": {
        "shape": {
          "type": "point",
          "coordinates": [
            151.14646911621094,
            -33.68463933764522
          ]
        },
        "relation": "intersects"
      }
    }
  }
}

【讨论】:

【解决方案3】:

我不确定这个错误是否是由输入文件中的一些复杂的多边形引起的。

但是,在将多个多边形转换为受以下帖子启发的单个多边形之后,我设法摄取所有形状而没有任何错误:)

https://gist.github.com/mhweber/cf36bb4e09df9deee5eb54dc6be74d26

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多