2012-03-14 52 views
3

我使用Solr 3.4,索引为20M文档,每个文档都有纬度经度点。有一个预先存在的使用名为locLatLon的solr.LatLonType的索引字段。我们试图比较这个与solr.GeoHashField的性能。我在我们的模式中添加了一个新字段,该字段使用名为locLatLon_geohash的GeoHash字段,该字段由locLatLon字段中的copyField填充。我做了,我装了几个文件Solr的指数的样本负载,我能够通过这两个字段进行搜索(我删除了实际Solr的服务器名称)Solr 3.4查询GeoHash字段性能问题

地理散列查询:

http://solr_server:8983/solr/select/?q=*:*&fq={!bbox%20pt=34.1,-118.3574%20sfield=locLatLon_geohash%20d=10} 

地理空间查询:

http://solr_server:8983/solr/select/?q=*:*&fq={!bbox%20pt=34.1,-118.3574%20sfield=locLatLon%20d=10} 

在这两个查询应返回的结果非常相似的表面。地理空间查询需要62ms并返回179k文档。 geohash查询需要34081ms并返回121k文档。我并不太在意返回结果的数量(还),因为我担心生成这些结果所花费的时间。

阅读GeoHash看起来这种查询Solr的方法应该非常快,但实际上它非常慢。

我试着通过添加debugQuery = on查询参数来进行调试,但是没有告诉我任何我可以使用的东西,而无需通过源代码进行挖掘。以下是Solr结果的片段,其中只是最终的过滤器查询。

地理散列调试Solr的输出:

<arr name="parsed_filter_queries"> 
    <str>ConstantScore(frange(ghhsin(str(locLatLon_geohash),literal(9q5cfxwybswp))):[0 TO 10.0])</str> 
</arr> 

地理空间调试Solr的输出:

<arr name="parsed_filter_queries"> 
    <str>+locLatLon_0_coordinate:[34.01006796645071 TO 34.18993203354929] +locLatLon_1_coordinate:[-118.46600561233814 TO -118.24879438766185]</str> 
</arr> 

问题(S):有什么是我没有考虑到当使用GeoHash类型的Solr?还有什么我应该尝试调试吗?

回答

1

阅读评论至SOLR-2155。附加的补丁程序从未应用,并且该故障单仍然未解决,但附加的zip是一个具有该功能的插件,因此不需要实际修补SOLR。该补丁应该允许多个点在一个文档上进行索引,但它似乎也实现了匹配geohash的前缀以进行快速边界框搜索。