Solr - 多边形搜索 - 按距离从多边形中心排序结果
Solr - Polygon Search - Sort results from center of the polygon by distance
我们之前使用的是 Lucene 4 内核 api,最近迁移到 SolrCloud v 7.7.X。
我有以下用于对多边形进行空间查询的字段定义 -
<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="JTS"
autoIndex="true"
validationRule="repairBuffer0"
distErrPct="0.025"
maxDistErr="0.001"
geo="true"
distanceUnits="kilometers" />
这是我的字段定义 -
<field name="LATLON" multiValued="true" type="location_rpt" indexed="true"/>
这是我的示例查询 -
q=*:*&fq={!field f=LATLON}Intersects(POLYGON(( -74.31737 40.61442, -73.48103 40.61442, -73.48103 41.24627, -74.31737 41.24627, -74.31737 40.61442)))&fq=TYPE:HOTEL&cache=true&fl=*,score&debug=false&rows=2000
结果不按任何特定顺序返回,但我希望它们始终基于多边形中心的距离返回。
我们缺少什么?
你可以像这样使用 geofilt 方法
fq= "{!geofilt pt=" + latLng + " sfield=geoBoundary d=" + distance.get + " sort=geodist(geoBoundary," + latLng + ") asc}")
latlng = your location point
geoBoundary = your polygon
我们之前使用的是 Lucene 4 内核 api,最近迁移到 SolrCloud v 7.7.X。
我有以下用于对多边形进行空间查询的字段定义 -
<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="JTS"
autoIndex="true"
validationRule="repairBuffer0"
distErrPct="0.025"
maxDistErr="0.001"
geo="true"
distanceUnits="kilometers" />
这是我的字段定义 -
<field name="LATLON" multiValued="true" type="location_rpt" indexed="true"/>
这是我的示例查询 -
q=*:*&fq={!field f=LATLON}Intersects(POLYGON(( -74.31737 40.61442, -73.48103 40.61442, -73.48103 41.24627, -74.31737 41.24627, -74.31737 40.61442)))&fq=TYPE:HOTEL&cache=true&fl=*,score&debug=false&rows=2000
结果不按任何特定顺序返回,但我希望它们始终基于多边形中心的距离返回。
我们缺少什么?
你可以像这样使用 geofilt 方法
fq= "{!geofilt pt=" + latLng + " sfield=geoBoundary d=" + distance.get + " sort=geodist(geoBoundary," + latLng + ") asc}")
latlng = your location point
geoBoundary = your polygon