如何在 ElasticSearch 中的大地理空间数据上使用 Geo 查询 geo_shape多个预索引形状获取形状中的所有点/形状中的所有点?

如何解决如何在 ElasticSearch 中的大地理空间数据上使用 Geo 查询 geo_shape多个预索引形状获取形状中的所有点/形状中的所有点?

我有三个包含地理空间数据的 ElasticSearch 索引:

  • index-geodoc-geoshape-shapes-1:地理形状(例如:具有约 20 万个形状作为文档的英国输出区域)
    • 每个文档都包含一个输出区域形状,并将 geojson 存储为类型为 geo_shape 的几何属性
  • index-geodoc-geoshape-shapes-2:地理形状(例如:英国统计地理级别,约有 50 万个形状作为文档)
    • 每个文档都包含一个统计地理形状,并将 geojson 存储为类型为 geo_shape 的几何属性
  • index-geodoc-geoshape-points-3:点数(~500k - 1m - 3m 文档)
    • 每个文档都包含一个具有某些属性的点,并将坐标(纬度和经度)存储为位置属性,存储类型为 geo_shape(我也尝试使用类型 geo_point 存储)

使用地理查询 (geo_shape) 从上述所有 3 个索引中获取形状中的所有点或形状中的所有形状的最佳/最佳方法是什么?地理空间数据(每个索引中约 500k - 3m 个文档)?

简短的词:我正在进行初始搜索获取所有形状 ID(SearchAsyncScrollScrollAll)。 然后,对于每个形状 ID,我正在使用 geo_shape query with pre-indexed Shape 进行 SearchAsync(使用 Scroll 或使用 SearchAfter调用搜索 / 内相交的点或形状。 这意味着对于我发送到 ES 服务器的每个 Shape Id 300k-500k-1m(或更多)搜索请求。你怎么认为?什么是更好的方法

有没有办法使用来自多个文档的多个预索引形状使用 geo_shape query 进行搜索查询

我看到这需要一些处理时间和能量,并且不会很快完成(实时)。 所以,我想运行某种匹配过程作为后台工作来搜索形状中的所有点(或形状中的形状)并将这些关系添加到同一索引或附加索引中,以获得形状中的这些点比再次使用 geo_shape query 更快。 尽管如此,这些正在运行的后台进程仍然需要很多时间,而且我遇到了一些 ElasticSearch 或 HTTP 超时。

this public github gist,我提供了我的实现的一些部分(不是一个工作示例,因为为了清晰和简单,我删除了一些部分)。


C# ASP .NET 5.0 控制台应用程序在 2 层上从 Azure VM 运行:

  • 具有 2vcpu 和 8GB RAM 的 B2ms
  • 具有 8vcpu 和 32GB RAM 的 D8s_v3

在 2 层上进行的 ElasticSearch 服务器集群 AZURE.DATA.HIGHcpu.D64SV3 测试:

  • 1 个具有 30GB RAM 和 240GB 存储空间的节点
  • 2 个节点,每个节点具有 60GB RAM 和 480GB 存储空间

ElasticSearch 索引被索引为 10 个主分片和 1 个副本分片。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?