2009-11-16 57 views
2

我有一个使用lucene进行搜索的应用程序。搜索空间是成千上万。搜索这些数千人,我只得到了几个结果,大约20(这是可以和预期的)。但是,当我将搜索空间缩小到仅仅那20个条目时(即,我只索引那20个条目并忽略其他所有内容...以便开发将更容易),我得到相同的20个结果,但是以不同的顺序(和得分)。使用不同搜索空间大小的不同lucene搜索结果

我试图通过域#setOmitNorms(true)禁用规范因素,但我仍然得到不同的结果?

什么可能导致得分差异?

感谢

回答

5

请参阅Lucene的Similarity API得分文档。我敢打赌,这两种情况之间的idf差异(numDocs和docFreq都不同)。为了确切知道,请使用explain()函数来调试分数。

编辑:充分解释的代码段:

TopDocs hits = searcher.search(query, searchFilter, max); 
ScoreDoc[] scoreDocs = hits.scoreDocs; 
for (ScoreDoc scoreDoc : scoreDocs) { 
    String explanation = searcher.explain(query, scoreDoc.doc).toString(); 
    Log.debug(explanation); 
} 
+0

赦免,但我在哪里可以得到解释()的int(第二个参数)? – 2009-11-17 02:01:02

+0

请参阅我的编辑示例。 – 2009-11-17 07:50:18

+0

我没有多少时间回到我的问题上,但这个建议似乎指向了正确的方向。谢谢。 – 2009-11-30 03:56:50

2

得分取决于索引中的所有文件:

在一般情况下,后面的 向量空间模型(VSM)的想法是比较 次的查询字词出现在 文档相对于 时间段中出现的所有 文档中出现的次数,该文档与查询关联度越高。

来源:Apache Lucene - Scoring

+0

我不知道我理解这一点。所以如果我在搜索空间搜索一个名字为'Mark'的人,我会得到'Mark Anthony','Markos'和'Mark'。但是,如果我将搜索空间限制为仅限3个(仅限于索引3),我会得到'Mark','Mark Anthony'和'Markos'。鉴于相同的相关文件,但不同的“噪音”文件,他们的分类将如何改变? – 2009-11-17 02:18:12

+0

对不起,我也不是专家。你有没有看过http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html? – sfussenegger 2009-11-17 08:24:39