我有一组数据,其中每个条目都有一个与其相关联的纬度/经度坐标。我有以下表格:
我想返回在表单中选择的任何纬度/经度点的50英里半径内具有纬度/经纬度坐标的所有数据。建议使用Solr执行此操作的方法是什么?
jucafojl1#
可以使用字段类型LatLonPointSpatialField为纬度/经度编制索引。协调。例如,Solr default configset在其模式中定义了以下内容,这足以启用空间搜索:
LatLonPointSpatialField
<!-- A specialized field for geospatial search filters and distance sorting. --> <fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/> <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
LLPSF支持切换索引、存储、docValues和multiValued。当启用“索引”时(默认),LLPSF内部使用二维Lucene“点”(BDK树)索引。启用“docValues”后,纬度和经度对被位交错成64位,并放入Lucene docValues中。docValues数据的精度约为一厘米。然后,在过滤器查询中使用geofilt查询解析器进行查询。在选定的任何(多个)纬度/经度点周围给定半径的圆内匹配条目意味着您需要对多个{!geofilt}查询执行OR操作,每个pt对应一个查询。注意,径向距离d必须以公里为单位,例如:
geofilt
{!geofilt}
pt
d
q=*:*&sfield=coord_p&d=80.4672&fq=({!geofilt pt=x1,y1} OR {!geofilt pt=x2,y2} OR ...)
1条答案
按热度按时间jucafojl1#
可以使用字段类型
LatLonPointSpatialField
为纬度/经度编制索引。协调。例如,Solr default configset在其模式中定义了以下内容,这足以启用空间搜索:LLPSF支持切换索引、存储、docValues和multiValued。当启用“索引”时(默认),LLPSF内部使用二维Lucene“点”(BDK树)索引。启用“docValues”后,纬度和经度对被位交错成64位,并放入Lucene docValues中。docValues数据的精度约为一厘米。
然后,在过滤器查询中使用
geofilt
查询解析器进行查询。在选定的任何(多个)纬度/经度点周围给定半径的圆内匹配条目意味着您需要对多个{!geofilt}
查询执行OR操作,每个pt
对应一个查询。注意,径向距离d
必须以公里为单位,例如: