也许我在这里遗漏了一些东西,但我无法在Lucene Spatial(10.3)中进行空间分类,如SpatialExample.java中所述。这是我的代码(Scala - 但将1:1翻译成Java):
val searcher = placeSearcherManager.acquire()
val point = spatialCtx.makePoint(lat, lon)
val args =
new SpatialArgs(SpatialOperation.Intersects,
spatialCtx.makeCircle(lon, lat,
DistanceUtils.dist2Degrees(100, DistanceUtils.EARTH_MEAN_RADIUS_KM)))
val filter = spatialStrategy.makeFilter(args)
val valueSource = spatialStrategy.makeDistanceValueSource(point)
// Here's what's supposed to set up distance sorting
val distanceSort = new Sort(valueSource.getSortField(false)).rewrite(searcher)
try {
val topDocs = searcher.search(new MatchAllDocsQuery(), filter, limit, distanceSort)
val scoreDocs = topDocs.scoreDocs
// Print the results
scoreDocs.foreach(scoreDoc => {
val doc = searcher.doc(scoreDoc.doc)
val docPoint = spatialCtx.readShape(doc.get(spatialStrategy.getFieldName())).asInstanceOf[Point]
val distance = spatialCtx.getDistCalc().distance(args.getShape.getCenter, docPoint)
val distanceKM = DistanceUtils.degrees2Dist(distance, DistanceUtils.EARTH_EQUATORIAL_RADIUS_KM)
Logger.info("distance: " + distanceKM)
})
} finally {
placeSearcherManager.release(searcher)
}
当我运行查询时,结果似乎不会受到排序的影响:
[info] application - distance: 406.01578203364323
[info] application - distance: 327.67269076509876
[info] application - distance: 218.94951150657565
[info] application - distance: 251.37927074183852
[info] application - distance: 140.6570939383426
[info] application - distance: 460.47502999630586
[info] application - distance: 462.37676932762116
[info] application - distance: 489.49001138999256
[info] application - distance: 392.0773262500455
[info] application - distance: 227.8864179949065
将排序顺序从升序更改为降序也不起作用。我无法看到我正在做的事情与正式例子之间的区别(使用SearcherManager除外,但我已经检查过,但这并没有什么区别)。任何提示赞赏!
答案 0 :(得分:0)
哎呀。回到回答我自己的问题。如果有人再次遇到这种情况:我的理由是我的代码使用了两个不同的策略对象进行读写 - 而那些使用了不同设置的GeoHashPrefixTree的maxLevel参数。永远不要那样做! ; - )