我有一个使用lucene进行搜索的应用程序。搜索空间是成千上万。搜索这些数千人,我只得到了几个结果,大约20(这是可以和预期的)。但是,当我将搜索空间缩小到仅仅那20个条目时(即,我只索引那20个条目并忽略其他所有内容...以便开发将更容易),我得到相同的20个结果,但是以不同的顺序(和得分)。使用不同搜索空间大小的不同lucene搜索结果
我试图通过域#setOmitNorms(true)禁用规范因素,但我仍然得到不同的结果?
什么可能导致得分差异?
感谢
我有一个使用lucene进行搜索的应用程序。搜索空间是成千上万。搜索这些数千人,我只得到了几个结果,大约20(这是可以和预期的)。但是,当我将搜索空间缩小到仅仅那20个条目时(即,我只索引那20个条目并忽略其他所有内容...以便开发将更容易),我得到相同的20个结果,但是以不同的顺序(和得分)。使用不同搜索空间大小的不同lucene搜索结果
我试图通过域#setOmitNorms(true)禁用规范因素,但我仍然得到不同的结果?
什么可能导致得分差异?
感谢
请参阅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);
}
得分取决于索引中的所有文件:
在一般情况下,后面的 向量空间模型(VSM)的想法是比较 次的查询字词出现在 文档相对于 时间段中出现的所有 文档中出现的次数,该文档与查询关联度越高。
我不知道我理解这一点。所以如果我在搜索空间搜索一个名字为'Mark'的人,我会得到'Mark Anthony','Markos'和'Mark'。但是,如果我将搜索空间限制为仅限3个(仅限于索引3),我会得到'Mark','Mark Anthony'和'Markos'。鉴于相同的相关文件,但不同的“噪音”文件,他们的分类将如何改变? – 2009-11-17 02:18:12
对不起,我也不是专家。你有没有看过http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html? – sfussenegger 2009-11-17 08:24:39
赦免,但我在哪里可以得到解释()的int(第二个参数)? – 2009-11-17 02:01:02
请参阅我的编辑示例。 – 2009-11-17 07:50:18
我没有多少时间回到我的问题上,但这个建议似乎指向了正确的方向。谢谢。 – 2009-11-30 03:56:50