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();