2016-03-29 21 views
1

Lucene實現了一個名爲QueryRescorer的新類,如果您想在前N個Lucene搜索結果中實施更耗費資源的排序操作,該類應該很有用。使用QueryRescorer重新評分文檔

不幸的是,我實際上並不知道如何使用這個類。下面是文檔頁面:

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) 

例如,什麼是在通過了該「查詢」?原始查詢?或者它是一種用於重新排名的輔助查詢?

如果有人真的瞭解這是如何工作的,我會非常感謝一個解釋。

回答

1

這是一個不同的查詢。 QueryRescorer的想法是,您的第一遍將使用廣義定義的查詢,該查詢性能良好,但不能完全表達您需要搜索的內容。然後第二遍,您使用更精確但更昂貴的查詢。

有關示例,取這些文件:

1 - 「相關的測試文本」
2 - 「superrelevant測試文本」
3 - 「ultramightyrelevant測試文本」
4 - 「無趣測試文本」
5 - ‘以及更多文檔什麼都沒有做這個查詢......’

我要搜索文件的文件包含「相關」和「測試文本」,但我想在搜索「相關」時容忍誇張。我只能查詢*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); 
+0

很酷,現在有道理。謝謝! –