在 ElasticSearch 中查询所有具有 intersects/within 索引地理形状的地理点的文档

Querying ElasticSearch for all documents with a Geo Point that intersects/within an indexed Geo Shape

我从一个已索引到 ES 的形状文件中提取了 geo_shapes 的集合。我还有大量 geo_points 的文档索引。我正在尝试 运行 查询 returns 所有在 geo_shape 中有一个点的文档,但一直返回零结果。

我很确定映射是正确的,因为我可以查询特定的 lat/long 并成功取回它所在的 geo_shape。我也可以做一个边界框使用 geo_points 搜索文档并成功返回匹配的文档列表。

这是我的 geo_shapes 的映射:

{
    "geometry": {
        "properties": {
            "type": "geo_shape",
            "tree": "quadtree"
        }
    }
}

这是 geo_points:

文档的映射
{
    "docs": {
        "location": {
            "properties": {
                "coordinates": {
                    "type": "geo_point",
                    "geohash": true
                }
            }
        }
    }
}

我正在尝试 运行 的查询是:

{
    "query": "geo_shape": {
        "location": {
            "indexed_shape": {
                "id": "shape_id",
                "type": "locations",
                "index": "index_name",
                "path": "geometry"
            }
        }
    }
}

我正在 运行 对特定的 index/type 进行查询,其中包含具有 geo_points 的文档。如果我 运行 它针对整个索引,那么只有 geo_shape 文档 returns.

为了使其正常工作,您的第二个索引中的位置也需要映射为 geo_shape(类型=点)(而不是 geo_point),如下所示:

{
  "locations": {
    "location": {
      "properties": {
        "coordinates": {
          "type": "geo_shape",
          "tree": "quadtree",
          "precision": "1m"
        }
      }
    }
  }
}

然后您的 geo_shape 查询 pre-indexed shapes 将按预期工作