我有一组数据,其中每个条目都有一个与其相关的lat/lon坐标。
我有以下表格:
- 通过地理编码转换为lat/lon的文本字段
- 3个选择字段,每个字段只允许一个值,每个值代表一个纬度/经度坐标
我想返回在表格中选择的任何纬度/经度点的50英里半径内具有纬度/经度坐标的所有数据。建议使用Solr执行此操作的方法是什么?
您可以使用字段类型LatLonPointSpatialField
对lat/lon进行索引。坐标。例如,Solr默认配置集在其模式中定义了以下内容,这足以启用空间搜索:
<!-- 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支持切换索引、存储、文档值和多值。LLPSF内部使用2维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 ...)