我正在尝试使用最新版本的Lucene(4.0.0)进行地理搜索功能,要求很简单:获取圆形内的点(中心和半径作为查询条件传入)。我找不到输出每个结果到中心距离的API,必须在获取每个结果的纬度和经度后计算距离。有人可以帮忙吗?以下是代码:
SpatialContext sc = SpatialContext.GEO;
SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects,
sc.makeCircle(lo, la, DistanceUtils.dist2Degrees(dist, DistanceUtils.EARTH_MEAN_RADIUS_KM)));
Filter geo_filter = strategy.makeFilter(args);
try {
Sort chainedSort = new Sort(sfArray).rewrite(searcher);
TopDocs docs = searcher.search(new MatchAllDocsQuery(), geo_filter, 10000, chainedSort);
logger.debug("search finished, num: " + docs.totalHits);
for (ScoreDoc scoreDoc : docs.scoreDocs){
Document doc = searcher.doc(scoreDoc.doc);
double la1 = Double.parseDouble(doc.get("la"));
double lo1 = Double.parseDouble(doc.get("lo"));
double distance = getDistance(la1, lo1, la, lo); // have to calc distance by myself here, not cool
}
} catch (IOException e) {
logger.error("fail to get the search result!", e);
}
使用Lucene 3.X很容易实现距离搜索,但对于熟悉Lucene 4.0.0的地理(空间)搜索有什么建议吗?