2016-03-29 15 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のアイデアは、最初のパスではよく実行されるが、検索する必要があるものを完全には表現できない、広く定義されたクエリを使用するということです。次に、2番目のパスでは、より正確で高価なクエリを使用します。例えば

、これらの文書取る:

1 - "関連試験テキスト"
2 - "superrelevant試験テキスト"
3 - "ultramightyrelevant試験テキスト"
4 - 「つまらない試験テキスト」
5 - 『このクエリとは何の関係もないともっとたくさんの書類...』

私はドキュメントのドキュメントを検索したいです「関連」と「テストテキスト」を含んでいますが、「関連性」を検索する際には誇張に寛容になりたいと思います。私は*relevant* "test text"を照会することしかできませんでしたが、主導的なワイルドカードが検索パフォーマンスを完全に殺すことが分かっています。代わりに、私は"test text"で最初に問い合わせることができます。これらの文書の4つすべてを取得し、次に*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

これは意味があります。ありがとう! –

関連する問題