我想搜索一个边界框内的地图,该边界框的北/东点和西南点的纬度/经度可用。我将lat
和lng
编入TrieDoubleField
类型,将latlng
编入solr.LatLonType
类型。在一个方框内搜索的原因(而不是像geofilt
中那样的半径)是因为搜索是在矩形地图上可见的所有区域上进行的,并且我得到了地图的4个角的坐标。
问题:进行2个范围查询是否效率低,一个用于lat
,一个用于lng
?如下图所示,必须搜索许多不必要的范围。
http://127.0.0.1:8080/solr/select?q=*:*fl=id&fq=lat:[42.2823890429 TO 42.4224427748] AND lng:[-71.3345718384 TO -70.7612228394]
如果是这样,有更好的方法吗?
fq={!bbox}&sfield=latlng&pt=45.15,-93.85&
d=5
无效,因为我无法计算d
的值以匹配我的地图边界。
答案 0 :(得分:4)
Solr 4有一组新的空间字段类型,您可以在其中指定lat-lon边界框。我打算在本周末更新is information here。
如果您使用的是Solr 3,那么您可以像往常一样进行数值范围查询。如果你想处理一个日期线交叉,那么它有点棘手,因为经度需要两对范围查询。并且“不”,正如你所问,这种方法效率不高。顺便说一句,你不需要索引纬度和&由于LatLonType已经执行此操作,因此您可以使用其字段。在架构浏览器中查看,您应该看到以__x和__y结尾的字段(如果我记得的话)。