Elastic搜索的新功能,使用索引来存储文档,例如是有关雇员的公司信息,索引中目前有60万个雇员数据,在这些雇员中,我们需要根据特定属性(例如地址)来计算距离计算。我们要做的基本上是以下步骤:
此流程的问题是,我们将索引中存在的所有文档加载到Java内存中,然后应用公式,这会花费大量时间来加载和应用公式,而且JVM将具有内存限制将文档加载到内存中。
请原谅我关于该主题的有限知识,但是有一种方法可以直接在弹性搜索中运行这些距离公式,而不是将整个索引加载到内存中。
感谢帮助...
答案 0 :(得分:1)
elasticsearch中有一个用于地理点的数据类型:https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html
如果您可以将拥有的地址转换为纬度/经度坐标,或者拥有该地址,或使用将地址解析为地理位置的服务,则可以将该地理位置字段映射到elasticsearch geo_point(在索引模板,请参阅我上面粘贴的链接)。如果不将字段映射到geo_point,elasticsearch会将其视为浮点数组,即浮点类型。
一旦有了地理坐标字段,就可以开始在其上运行一些距离聚合。有三种聚合可用于geo_point类型的字段。请参阅此处的选项:https://www.elastic.co/guide/en/elasticsearch/guide/current/geo-aggs.html