问候,
我有以下 Apache Lucene 片段,它给了我一些不错的结果:
int numHits=100;
int resultsPerPage=100;
IndexSearcher searcher=new IndexSearcher(reader);
TopScoreDocCollector collector=TopScoreDocCollector.create(numHits,true);
Query q=parser.parse(queryString);
searcher.search(q,collector);
ScoreDoc[] hits=collector.topDocs(0*resultsPerPage,resultsPerPage).scoreDocs;
Results r=new Results();
r.length=hits.length;
for(int i=0;i<hits.length;i++){
Document doc=searcher.doc(hits[i].doc);
double distanceKm=getGreatCircleDistance(lucene2double(doc.get("lat")), lucene2double(doc.get("lng")), Double.parseDouble(userLat), Double.parseDouble(userLng));
double newRelevance=((1/distanceKm)*Math.log(hits[i].score)/Math.log(2))*(0-1);
System.out.println(hits[i].doc+"\t"+hits[i].score+"\t"+doc.get("content")+"\t"+"Km="+distanceKm+"\trlvnc="+String.valueOf(newRelevance));
}
我想知道, hits[i].score 总是在 0 和 1 之间吗?好像是这样,但我不能确定。我什至检查了 Lucene 文档(类 ScoreDocs),但无济于事。您会看到我正在计算基于 hits[i].score 的“newRelevance”值的日志。我需要 hits[i].score 介于 0 和 1 之间,因为如果它低于零,我会得到一个错误;大于 1,符号将从负变为正。
我希望那里的一些 Lucene 专家可以为我提供一些见解。
非常感谢,