有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

弹性搜索弹性搜索Lucene公式的Java计算

Elastic search的新功能是使用索引存储文档,例如关于员工的公司信息,目前索引中有60万个员工数据,在这些员工中,我们需要根据特定属性(如地址)计算距离。我们所做的基本上是以下步骤:

  • 在java程序中提取索引中的所有文档
  • 在中使用Lambdas实现并行性,并迭代每个文档,然后计算与集合中其他元素的距离(lavenshtien、NGram和TFID),然后求出平均值

这个流程的问题是,我们将索引中存在的所有文档加载到java内存中,然后应用公式,这会占用加载和应用公式的大量时间,而且JVM将有内存限制来加载内存中的文档

请原谅我在这方面的知识有限,但有没有一种方法可以让我们直接在弹性搜索上运行这些距离公式,而不是将整个索引加载到内存中

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    elasticsearch中有一种用于地理点的数据类型:https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html

    如果你能将你的地址转换为他们的纬度/经度坐标,或者你有它,或者使用一个服务将地址解析为地理点,那么你可以将该地理点字段映射到一个elasticsearch地理点(在索引模板中,参见我上面粘贴的链接)。如果不将字段映射到geo_point,elasticsearch会将其视为浮点数组,这是浮点类型

    一旦你有了地理点场,你就可以开始在上面运行一些距离聚合。有三个聚合可用于geo_point类型的字段。请参见此处的选项:https://www.elastic.co/guide/en/elasticsearch/guide/current/geo-aggs.html