如何解决如何在 ElasticSearch 中的大地理空间数据上使用 Geo 查询 geo_shape多个预索引形状获取形状中的所有点/形状中的所有点?
我有三个包含地理空间数据的 ElasticSearch 索引:
-
index-geodoc-geoshape-shapes-1
:地理形状(例如:具有约 20 万个形状作为文档的英国输出区域) -
index-geodoc-geoshape-shapes-2
:地理形状(例如:英国统计地理级别,约有 50 万个形状作为文档) -
index-geodoc-geoshape-points-3
:点数(~500k - 1m - 3m 文档)
使用地理查询 (geo_shape
) 从上述所有 3 个索引中获取形状中的所有点或形状中的所有形状的最佳/最佳方法是什么?地理空间数据(每个索引中约 500k - 3m 个文档)?
简短的词:我正在进行初始搜索以获取所有形状 ID(SearchAsync
与 Scroll
或 ScrollAll
)。
然后,对于每个形状 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 运行:
在 2 层上进行的 ElasticSearch 服务器集群 AZURE.DATA.HIGHcpu.D64SV3 测试:
- 1 个具有 30GB RAM 和 240GB 存储空间的节点
- 2 个节点,每个节点具有 60GB RAM 和 480GB 存储空间
ElasticSearch 索引被索引为 10 个主分片和 1 个副本分片。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。