You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mk...@apache.org on 2017/04/22 23:03:57 UTC

lucene-solr:branch_6x: SOLR-9217: delay JoinUtil call to createWeight for score join

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x dd54a3641 -> c215c780c


SOLR-9217: delay JoinUtil call to createWeight for score join


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

Branch: refs/heads/branch_6x
Commit: c215c780cd0462a9f5e4ea0a5dc80d44234e8149
Parents: dd54a36
Author: Mikhail Khludnev <mk...@apache.org>
Authored: Sun Apr 23 00:28:20 2017 +0300
Committer: Mikhail Khludnev <mk...@apache.org>
Committed: Sun Apr 23 02:03:14 2017 +0300

----------------------------------------------------------------------
 solr/CHANGES.txt                                  |  3 +++
 .../solr/search/join/ScoreJoinQParserPlugin.java  | 18 +++++++++---------
 .../solr/search/join/TestScoreJoinQPNoScore.java  |  7 +++----
 3 files changed, 15 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c215c780/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 786c330..9e9b91f 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -88,6 +88,9 @@ Optimizations
 * SOLR-10499: facet.heatmap is now significantly faster when the docset (base query) matches everything and there are no
   deleted docs.  It's also faster when the docset matches a small fraction of the index or none. (David Smiley)
 
+* SOLR-9217: Reduced heap consumption for filter({!join ... score=...}) 
+  (Andrey Kudryavtsev, Gopikannan Venugopalsamy via Mikhail Khludnev)
+
 Bug Fixes
 ----------------------
 * SOLR-10281: ADMIN_PATHS is duplicated in two places and inconsistent. This can cause automatic

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c215c780/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
index 0cb7e07..923b984 100644
--- a/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
@@ -23,9 +23,9 @@ import java.util.Objects;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.FieldType.LegacyNumericType;
 import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Weight;
 import org.apache.lucene.search.join.JoinUtil;
 import org.apache.lucene.search.join.ScoreMode;
 import org.apache.solr.cloud.ZkController;
@@ -90,7 +90,7 @@ public class ScoreJoinQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public Query rewrite(IndexReader reader) throws IOException {
+    public Weight createWeight(IndexSearcher searcher, boolean needsScores) throws IOException {
       SolrRequestInfo info = SolrRequestInfo.getRequestInfo();
 
       CoreContainer container = info.getReq().getCore().getCoreContainer();
@@ -104,17 +104,17 @@ public class ScoreJoinQParserPlugin extends QParserPlugin {
       fromHolder = fromCore.getRegisteredSearcher();
       final Query joinQuery;
       try {
-        SolrIndexSearcher searcher = fromHolder.get();
+        SolrIndexSearcher fromSearcher = fromHolder.get();
         
-        FieldType.LegacyNumericType fromNumericType = getNumericType(searcher.getSchema(),
+        FieldType.LegacyNumericType fromNumericType = getNumericType(fromSearcher.getSchema(),
                 info.getReq().getSchema());
         
-        joinQuery = createJoinQuery(searcher, fromNumericType);
+        joinQuery = createJoinQuery(fromSearcher, fromNumericType);
       } finally {
         fromCore.close();
         fromHolder.decref();
       }
-      return joinQuery.rewrite(reader);
+      return joinQuery.rewrite(searcher.getIndexReader()).createWeight(searcher, needsScores);
     }
 
     @Override
@@ -164,11 +164,11 @@ public class ScoreJoinQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public Query rewrite(IndexReader reader) throws IOException {
+    public Weight createWeight(IndexSearcher searcher, boolean needsScores) throws IOException {
       SolrRequestInfo info = SolrRequestInfo.getRequestInfo();
       IndexSchema schema = info.getReq().getSchema();
-      final Query jq = createJoinQuery(info.getReq().getSearcher(), getNumericType(schema, schema));
-      return jq.rewrite(reader);
+      final Query jq = createJoinQuery(searcher, getNumericType(schema, schema));
+      return jq.rewrite(searcher.getIndexReader()).createWeight(searcher, needsScores);
     }
 
     protected Query createJoinQuery(IndexSearcher searcher, LegacyNumericType numericType) throws IOException {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c215c780/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPNoScore.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPNoScore.java b/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPNoScore.java
index d60643f..e36f37b 100644
--- a/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPNoScore.java
+++ b/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPNoScore.java
@@ -211,10 +211,9 @@ public class TestScoreJoinQPNoScore extends SolrTestCaseJ4 {
       {
         final Query query = QParser.getParser(req.getParams().get("q"), req).getQuery();
         final Query rewrittenQuery = query.rewrite(req.getSearcher().getIndexReader());
-        assertTrue(
-            rewrittenQuery+" should be Lucene's",
-            rewrittenQuery.getClass().getPackage().getName()
-            .startsWith("org.apache.lucene"));
+        assertEquals(rewrittenQuery+" is expected to be from Solr",
+            ScoreJoinQParserPlugin.class.getPackage().getName(), 
+            rewrittenQuery.getClass().getPackage().getName());
       }
       {
         final Query query = QParser.getParser(