Lucene实现了一个名为QueryRescorer的新类,如果你想在前N个Lucene搜索结果上实现更加资源密集的排序操作,那么它应该是有用的。
不幸的是,我实际上并不了解如何使用这门课程。这是文档页面:
http://lucene.apache.org/core/5_5_0/core/org/apache/lucene/search/QueryRescorer.html
主要方法似乎是:
public static TopDocs rescore(IndexSearcher searcher,
TopDocs topDocs,
Query query,
double weight,
int topN)
例如,这个'查询'传入?原始查询?或者它是一种在重新排名中使用的二级查询?
如果有人真正理解这是如何运作的,我会非常感谢解释。
答案 0 :(得分:1)
这是一个不同的查询。 QueryRescorer
的想法是,您的第一个传递将使用广泛定义的查询,该查询表现良好,但不能完全表达您需要搜索的内容。然后第二遍,你使用更精确但更昂贵的查询。
举个例子,请拿这些文件:
1 - "相关测试文本"
2 - "超级相关的测试文本"
3 - "超极近相关的测试文本"
4 - "无趣的测试文本"
5 - "还有更多与此查询无关的文档..."
我想搜索包含"相关"的文档文档。和#34;测试文本",但我希望在搜索"相关"时能够容忍夸张。我可以查询*relevant* "test text"
,但我知道领先的通配符将绝对谋杀搜索性能。相反,我可以首先查询"test text"
,这将获得所有这四个文档,然后将*relevant*
传递给QueryRescorer,以提高我真正的文档的分数想。
Query prequery = parser.parse("\"test text\"");
Query postquery = parser.parse("*relevant*");
TopDocs docs = searcher.search(prequery, 10);
docs = QueryRescorer.rescore(searcher, docs, postquery, 2, 10);