我不明白如何使用下面提到的代码实现按距离排序。
请解释一下...如果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
只是将字段名称扔掉。这是有道理的,因为比较器需要访问两个字段(在这种情况下为lat
和lon
)来执行比较,而不仅仅是一个。
相反,DistanceFilter
包装比较器需要访问的字段名称以及其他一些伴随数据。