【问题标题】:Index array of geopoints in ElasticsearchElasticsearch 中的地理点索引数组
【发布时间】:2020-04-01 10:08:58
【问题描述】:

以下是我的(示例)弹性搜索数据,其中包含我试图索引的一系列地理坐标。

PUT geomap/_doc/1
{
  "geometry": {
    "coordinates": [
      [
        [
          -10.8544921875,
          49.82380908513249
        ],
        [
          -10.8544921875,
          59.478568831926395
        ],
        [
          2.021484375,
          59.478568831926395
        ],
        [
          2.021484375,
          49.82380908513249
        ],
        [
          -10.8544921875,
          49.82380908513249
        ]
      ]
    ]
  }
}

这是我为它创建的 elasticsearch 映射。

PUT geomap
{
  "mappings": {
    "properties": {
      "geometry": {
        "properties": {
          "coordinates": { "type": "geo_point" }
        }
      }
    }
  }
}

当我尝试插入数据时,它不起作用。我怀疑这是因为我有数组坐标数组。当我将示例数据集更新为单个坐标数组时,它起作用了(如下)。

PUT geomap/_doc/1
{
  "geometry": {
    "coordinates": [
      [
        -10.8544921875,
        49.82380908513249
      ],
      [
        -10.8544921875,
        59.478568831926395
      ],
      [
        2.021484375,
        59.478568831926395
      ],
      [
        2.021484375,
        49.82380908513249
      ],
      [
        -10.8544921875,
        49.82380908513249
      ]
    ]
  }
}

我很高兴知道我在映射过程中犯了哪些错误,这让我不能这样做。

【问题讨论】:

    标签: elasticsearch search geopoints elasticsearch-mapping


    【解决方案1】:

    我怀疑你的文档是一个多边形,所以你要改用geo_shape

    PUT geomap
    {
      "mappings": {
        "properties": {
          "geometry": {
            "type": "geo_shape",
            "strategy": "recursive"
          }
        }
      }
    }
    

    注意support more spatial queries 的“递归”策略(至少在较新的 ES 版本中)。

    PUT geomap/_doc/1
    {
      "geometry": {
        "coordinates": [
          [
            [
              -10.8544921875,
              49.82380908513249
            ],
            [
              -10.8544921875,
              59.478568831926395
            ],
            [
              2.021484375,
              59.478568831926395
            ],
            [
              2.021484375,
              49.82380908513249
            ],
            [
              -10.8544921875,
              49.82380908513249
            ]
          ]
        ],
        "type": "polygon"
      }
    }
    

    注意 coords 数组是如何包装在另一个数组中以符合 geojson 标准的,并且添加了 type: polygon 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      相关资源
      最近更新 更多