SOLR中的地理集群

4
我们正在重新实现一个搜索功能,其中包括需要在地图上进行聚类的位置。我一直在寻找SOLR中的实现方法,但没有成功。
目前已经实现了带有地图聚类的搜索功能,请访问http://www.uship.com/find
有人看到过类似的实现或者有关于如何最好实现这个功能的想法吗?
谢谢, Nick
2个回答

6
如果需要对较少的点进行聚类,可能不需要使用Solr。可以获取这些点并使用类似HeatmapJS的工具进行绘制。
我猜测需求是对搜索结果进行聚类,这可能涉及到数千甚至数百万篇文档。建议首先生成一个网格区域密度的热图。可以通过将每个编码为geohash形式的点在每个长度(例如D2RY,D2R,D2,D)上进行索引来实现。但是,在长度前加上它的长度:4_D2RY,3_D2R,2_D2,1_D。这些小字符串放入Solr中的多值“string”类型字段中,然后进行分面。在分面时,您将得出适当的网格分辨率(例如goehash前缀长度),然后将其用作前缀查询,例如facet.prefix=4_。可以单独使用LatLonType字段对点进行索引,并在那里进行标准的边界框查询。此时,您的分面搜索结果将提供填充数字网格所需的信息。该方案的优美之处在于它非常快速,可以即时生成这种热图。但由于这是在多值字段上进行分面处理(该字段将有大量值),因此它会使用相当大的RAM。我想将其添加到新的Lucene空间模块(或Solr层)中,以一种不需要额外内存且易于使用的方式。它可能无法在Solr 4.0中实现,但可能会在4.1中实现。
此时,也许热图已经足够了。但是,您可能希望在此基础上应用聚类,正如您的问题所述。有人向我推荐了一些有趣的地理聚类算法可应用于热图。

不是的。很久以前我会打赌这是优先事项,但现在它并不是。 - David Smiley
这是一个非常巧妙的解决方案。你是自己想出来的吗?我不得不读了大约5次才明白它是如何工作的... - Layke
我做了(我想)。调整方法是将每个geohash子字符串放入相应长度的单独字段中--例如:一个“geohash_4”字段,其值为“D2RY”。现在不需要facet.prefix。如果您的数据是单值的,则这些将成为单值字段,而不像原始描述的方法。此方法具有不同的内存和性能特征,并且实时搜索友好(更好)。另一件要尝试的事情是使用doc-values进行索引,并再次查看Solr 4.2中的内存和性能。 - David Smiley
自从SOLR 5.1发布以来,它已经在构建中(https://issues.apache.org/jira/browse/LUCENE-6191)。参考http://lucene.apache.org/core/5_1_0/changes/Changes.html#v5.1.0.new_features。然而,找到它的方式很困难。 - Akshay
该项的作者与此答案的作者相同! - Akshay

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接