Solr-返回多个点半径内的文档?

3htmauhk  于 2022-09-27  发布在  Solr
关注(0)|答案(1)|浏览(238)

我有一组数据,其中每个条目都有一个与其相关联的纬度/经度坐标。
我有以下表格:

  • 通过地理编码转换为纬度/经度的文本字段
  • 3个选择字段,每个字段只允许一个值,每个值代表一个纬度/经度坐标

我想返回在表单中选择的任何纬度/经度点的50英里半径内具有纬度/经纬度坐标的所有数据。建议使用Solr执行此操作的方法是什么?

jucafojl

jucafojl1#

可以使用字段类型LatLonPointSpatialField为纬度/经度编制索引。协调。例如,Solr default configset在其模式中定义了以下内容,这足以启用空间搜索:

<!-- 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必须以公里为单位,例如:

q=*:*&sfield=coord_p&d=80.4672&fq=({!geofilt pt=x1,y1} OR {!geofilt pt=x2,y2} OR ...)

相关问题