You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2016/08/05 17:52:06 UTC

lucene-solr:master: SOLR-9353: Factor out ReRankQParserPlugin.ReRankQueryRescorer private class.

Repository: lucene-solr
Updated Branches:
  refs/heads/master 0583e5aa4 -> 15a706a1c


SOLR-9353: Factor out ReRankQParserPlugin.ReRankQueryRescorer private class.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/15a706a1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/15a706a1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/15a706a1

Branch: refs/heads/master
Commit: 15a706a1cb795f4e361e494a766f6be062a2131c
Parents: 0583e5a
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Aug 5 17:42:12 2016 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Aug 5 17:42:12 2016 +0100

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 +
 .../apache/solr/search/ReRankQParserPlugin.java | 96 +++++++++-----------
 2 files changed, 46 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15a706a1/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 787edee..cc70459 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -234,6 +234,8 @@ Other Changes
 
 * SOLR-9209: extracting JdbcDataSource.createResultSetIterator() for extension (Kristine Jetzke via Mikhai Khludnev)
 
+* SOLR-9353: Factor out ReRankQParserPlugin.ReRankQueryRescorer private class. (Christine Poerschke)
+
 ==================  6.1.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15a706a1/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java
index 37919f4..faa6825 100644
--- a/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java
@@ -32,6 +32,7 @@ import org.apache.lucene.search.LeafCollector;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryRescorer;
+import org.apache.lucene.search.Rescorer;
 import org.apache.lucene.search.ScoreDoc;
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.TopDocs;
@@ -97,12 +98,32 @@ public class ReRankQParserPlugin extends QParserPlugin {
     }
   }
 
+  private final class ReRankQueryRescorer extends QueryRescorer {
+
+    final double reRankWeight;
+
+    public ReRankQueryRescorer(Query reRankQuery, double reRankWeight) {
+      super(reRankQuery);
+      this.reRankWeight = reRankWeight;
+    }
+
+    @Override
+    protected float combine(float firstPassScore, boolean secondPassMatches, float secondPassScore) {
+      float score = firstPassScore;
+      if (secondPassMatches) {
+        score += reRankWeight * secondPassScore;
+      }
+      return score;
+    }
+  }
+
   private final class ReRankQuery extends RankQuery {
     private Query mainQuery = defaultQuery;
-    private Query reRankQuery;
-    private int reRankDocs;
-    private int length;
-    private double reRankWeight;
+    final private Query reRankQuery;
+    final private int reRankDocs;
+    final private int length;
+    final private double reRankWeight;
+    final private Rescorer reRankQueryRescorer;
     private Map<BytesRef, Integer> boostedPriority;
 
     public int hashCode() {
@@ -126,6 +147,7 @@ public class ReRankQParserPlugin extends QParserPlugin {
       this.reRankDocs = reRankDocs;
       this.reRankWeight = reRankWeight;
       this.length = length;
+      this.reRankQueryRescorer = new ReRankQueryRescorer(reRankQuery, reRankWeight);
     }
 
     public RankQuery wrap(Query _mainQuery) {
@@ -149,7 +171,7 @@ public class ReRankQParserPlugin extends QParserPlugin {
         }
       }
 
-      return new ReRankCollector(reRankDocs, length, reRankQuery, reRankWeight, cmd, searcher, boostedPriority);
+      return new ReRankCollector(reRankDocs, length, reRankQueryRescorer, cmd, searcher, boostedPriority);
     }
 
     @Override
@@ -172,57 +194,43 @@ public class ReRankQParserPlugin extends QParserPlugin {
     }
 
     public Weight createWeight(IndexSearcher searcher, boolean needsScores, float boost) throws IOException{
-      return new ReRankWeight(mainQuery, reRankQuery, reRankWeight, searcher, needsScores, boost);
+      return new ReRankWeight(mainQuery, reRankQueryRescorer, searcher, needsScores, boost);
     }
   }
 
   private class ReRankWeight extends FilterWeight {
-    private Query reRankQuery;
     private IndexSearcher searcher;
-    private double reRankWeight;
+    final private Rescorer reRankQueryRescorer;
 
-    public ReRankWeight(Query mainQuery, Query reRankQuery, double reRankWeight, IndexSearcher searcher, boolean needsScores, float boost) throws IOException {
+    public ReRankWeight(Query mainQuery, Rescorer reRankQueryRescorer, IndexSearcher searcher, boolean needsScores, float boost) throws IOException {
       super(mainQuery, mainQuery.createWeight(searcher, needsScores, boost));
-      this.reRankQuery = reRankQuery;
       this.searcher = searcher;
-      this.reRankWeight = reRankWeight;
+      this.reRankQueryRescorer = reRankQueryRescorer;
     }
 
     public Explanation explain(LeafReaderContext context, int doc) throws IOException {
       Explanation mainExplain = in.explain(context, doc);
-      return new QueryRescorer(reRankQuery) {
-        @Override
-        protected float combine(float firstPassScore, boolean secondPassMatches, float secondPassScore) {
-          float score = firstPassScore;
-          if (secondPassMatches) {
-            score += reRankWeight * secondPassScore;
-          }
-          return score;
-        }
-      }.explain(searcher, mainExplain, context.docBase+doc);
+      return reRankQueryRescorer.explain(searcher, mainExplain, context.docBase+doc);
     }
   }
 
   private class ReRankCollector extends TopDocsCollector {
 
-    private Query reRankQuery;
-    private TopDocsCollector  mainCollector;
-    private IndexSearcher searcher;
-    private int reRankDocs;
-    private int length;
-    private double reRankWeight;
-    private Map<BytesRef, Integer> boostedPriority;
+    final private TopDocsCollector  mainCollector;
+    final private IndexSearcher searcher;
+    final private int reRankDocs;
+    final private int length;
+    final private Map<BytesRef, Integer> boostedPriority;
+    final private Rescorer reRankQueryRescorer;
 
 
     public ReRankCollector(int reRankDocs,
                            int length,
-                           Query reRankQuery,
-                           double reRankWeight,
+                           Rescorer reRankQueryRescorer,
                            QueryCommand cmd,
                            IndexSearcher searcher,
                            Map<BytesRef, Integer> boostedPriority) throws IOException {
       super(null);
-      this.reRankQuery = reRankQuery;
       this.reRankDocs = reRankDocs;
       this.length = length;
       this.boostedPriority = boostedPriority;
@@ -234,7 +242,7 @@ public class ReRankQParserPlugin extends QParserPlugin {
         this.mainCollector = TopFieldCollector.create(sort, Math.max(this.reRankDocs, length), false, true, true);
       }
       this.searcher = searcher;
-      this.reRankWeight = reRankWeight;
+      this.reRankQueryRescorer = reRankQueryRescorer;
     }
 
     public int getTotalHits() {
@@ -276,16 +284,8 @@ public class ReRankQParserPlugin extends QParserPlugin {
 
           mainDocs.scoreDocs = reRankScoreDocs;
 
-          TopDocs rescoredDocs = new QueryRescorer(reRankQuery) {
-            @Override
-            protected float combine(float firstPassScore, boolean secondPassMatches, float secondPassScore) {
-              float score = firstPassScore;
-              if (secondPassMatches) {
-                score += reRankWeight * secondPassScore;
-              }
-              return score;
-            }
-          }.rescore(searcher, mainDocs, mainDocs.scoreDocs.length);
+          TopDocs rescoredDocs = reRankQueryRescorer
+              .rescore(searcher, mainDocs, mainDocs.scoreDocs.length);
 
           Arrays.sort(rescoredDocs.scoreDocs, new BoostedComp(boostedDocs, mainDocs.scoreDocs, rescoredDocs.getMaxScore()));
 
@@ -325,16 +325,8 @@ public class ReRankQParserPlugin extends QParserPlugin {
 
           mainDocs.scoreDocs = reRankScoreDocs;
 
-          TopDocs rescoredDocs = new QueryRescorer(reRankQuery) {
-            @Override
-            protected float combine(float firstPassScore, boolean secondPassMatches, float secondPassScore) {
-              float score = firstPassScore;
-              if (secondPassMatches) {
-                score += reRankWeight * secondPassScore;
-              }
-              return score;
-            }
-          }.rescore(searcher, mainDocs, mainDocs.scoreDocs.length);
+          TopDocs rescoredDocs = reRankQueryRescorer
+              .rescore(searcher, mainDocs, mainDocs.scoreDocs.length);
 
           //Lower howMany to return if we've collected fewer documents.
           howMany = Math.min(howMany, mainScoreDocs.length);