Author: tommaso
Date: Fri Feb 13 09:37:07 2015
New Revision: 1659483

URL: http://svn.apache.org/r1659483
Log:
OAK-2515 - avoiding sending a second query when numFound < rows * offset

Modified:
    
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
    
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java?rev=1659483&r1=1659482&r2=1659483&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
 Fri Feb 13 09:37:07 2015
@@ -207,9 +207,9 @@ public class SolrQueryIndex implements F
         return new AbstractIterator<SolrResultRow>() {
             private final Set<String> seenPaths = Sets.newHashSet();
             private final Deque<SolrResultRow> queue = Queues.newArrayDeque();
-            private SolrDocument lastDoc;
             private int offset = 0;
             private boolean noDocs = false;
+            private long numFound = 0;
 
             @Override
             protected SolrResultRow computeNext() {
@@ -254,16 +254,17 @@ public class SolrQueryIndex implements F
                     return false;
                 }
 
-                SolrDocument lastDocToRecord = null;
-
                 try {
                     if (log.isDebugEnabled()) {
                         log.debug("converting filter {}", filter);
                     }
                     SolrQuery query = FilterQueryParser.getQuery(filter, 
configuration);
-                    if (lastDoc != null) {
+                    if (numFound > 0) {
                         offset++;
                         int newOffset = offset * configuration.getRows();
+                        if (newOffset >= numFound) {
+                            return false;
+                        }
                         query.setParam("start", String.valueOf(newOffset));
                     }
                     if (log.isDebugEnabled()) {
@@ -278,6 +279,9 @@ public class SolrQueryIndex implements F
                     SolrDocumentList docs = queryResponse.getResults();
 
                     if (docs != null) {
+
+                        numFound = docs.getNumFound();
+
                         onRetrievedDocs(filter, docs);
 
                         for (SolrDocument doc : docs) {
@@ -285,7 +289,6 @@ public class SolrQueryIndex implements F
                             if (row != null) {
                                 queue.add(row);
                             }
-                            lastDocToRecord = doc;
                         }
                     }
 
@@ -315,9 +318,6 @@ public class SolrQueryIndex implements F
                         log.warn("query via {} failed.", solrServer, e);
                     }
                 }
-                if (lastDocToRecord != null) {
-                    this.lastDoc = lastDocToRecord;
-                }
 
                 return !queue.isEmpty();
             }

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java?rev=1659483&r1=1659482&r2=1659483&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
 Fri Feb 13 09:37:07 2015
@@ -19,6 +19,7 @@
 package org.apache.jackrabbit.oak.jcr.query;
 
 import javax.jcr.Node;
+import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.query.Query;
@@ -50,6 +51,21 @@ public class QueryFulltextTest extends A
         assertEquals("n, n", result);
     }
 
+    public void testNativeMatchAll() throws Exception {
+        Session session = superuser;
+        QueryManager qm = session.getWorkspace().getQueryManager();
+
+        String sql2 = "select [jcr:path] as [path] from [nt:base] " +
+                "where native('solr', '*:*')";
+        Query q = qm.createQuery(sql2, Query.JCR_SQL2);
+        QueryResult result = q.execute();
+        NodeIterator nodes = result.getNodes();
+        while (nodes.hasNext()) {
+            Node node = nodes.nextNode();
+            assertNotNull(node);
+        }
+    }
+
     public void testFulltext() throws Exception {
         Session session = superuser;
         QueryManager qm = session.getWorkspace().getQueryManager();


Reply via email to