我不明白如何使用下面提到的代码实现按距离排序。

请解释一下...如果sortfield为“”,lucene如何处理sortfield?

   DistanceQueryBuilder queryBuilder = new DistanceQueryBuilder(latitude, longitude, radius, "lat", "lon", CartesianTierPlotter.DEFALT_FIELD_PREFIX, true);
   DistanceFieldComparatorSource distComp = new DistanceFieldComparatorSource(queryBuilder.getDistanceFilter());
   Sort distSort = new Sort(new SortField("", distComp,false));


编辑1:

TopDocs topDocs = searcher.search(query, queryBuilder.getFilter(), 20,distSort);


PS:我正在使用Lucene 3.0.3

最佳答案

SortField本质上只是将字段名称传递给Comparator,并让它处理获取正确的值并进行比较。因此,DistanceFieldComparatorSource只是将字段名称扔掉。这是有道理的,因为比较器需要访问两个字段(在这种情况下为latlon)来执行比较,而不仅仅是一个。

相反,DistanceFilter包装比较器需要访问的字段名称以及其他一些伴随数据。

10-06 02:39