Author: tommaso
Date: Wed Jun 24 12:18:11 2015
New Revision: 1687245
URL: http://svn.apache.org/r1687245
Log:
OAK-2980 - fixed log statement, added test (branch 1.2)
Modified:
jackrabbit/oak/branches/1.2/ (props changed)
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
jackrabbit/oak/branches/1.2/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java
Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jun 24 12:18:11 2015
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679958,1679961,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684868,1685023,1685370,1685552,1685589,1685840,1685999,1686097,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971
,1687053-1687055,1687198,1687220
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679958,1679961,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684868,1685023,1685370,1685552,1685589,1685840,1685999,1686097,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971
,1687053-1687055,1687198,1687220,1687239-1687240
/jackrabbit/trunk:1345480
Modified:
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java?rev=1687245&r1=1687244&r2=1687245&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
Wed Jun 24 12:18:11 2015
@@ -197,12 +197,13 @@ public class SolrQueryIndex implements F
@Override
public Cursor query(final IndexPlan plan, final NodeState root) {
- return query(plan.getFilter(), plan.getSortOrder(), root);
+ return query(plan, plan.getSortOrder(), root);
}
- private Cursor query(Filter filter, List<OrderEntry> sortOrder, NodeState
root) {
+ private Cursor query(IndexPlan plan, List<OrderEntry> sortOrder, NodeState
root) {
Cursor cursor;
try {
+ Filter filter = plan.getFilter();
final Set<String> relPaths = filter.getFullTextConstraint() !=
null ? getRelativePaths(filter.getFullTextConstraint())
: Collections.<String>emptySet();
final String parent = relPaths.size() == 0 ? "" :
relPaths.iterator().next();
@@ -211,7 +212,7 @@ public class SolrQueryIndex implements F
AbstractIterator<SolrResultRow> iterator = getIterator(filter,
sortOrder, parent, parentDepth);
- cursor = new SolrRowCursor(iterator,
filter.getQueryEngineSettings());
+ cursor = new SolrRowCursor(iterator, plan,
filter.getQueryEngineSettings());
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -449,8 +450,6 @@ public class SolrQueryIndex implements F
estimator.update(filter, docs);
}
-
-
@Override
public String getPlanDescription(IndexPlan plan, NodeState root) {
return plan.toString();
@@ -458,7 +457,7 @@ public class SolrQueryIndex implements F
@Override
public Cursor query(Filter filter, NodeState rootState) {
- return query(filter, null, rootState);
+ return query(planBuilder(filter).build(), null, rootState);
}
static class SolrResultRow {
@@ -487,12 +486,14 @@ public class SolrQueryIndex implements F
* plus, eventually, the returned stored values if {@link
org.apache.solr.common.SolrDocument} is included in the
* {@link
org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex.SolrResultRow}.
*/
- static class SolrRowCursor implements Cursor {
+ private class SolrRowCursor implements Cursor {
private final Cursor pathCursor;
+ private final IndexPlan plan;
+
SolrResultRow currentRow;
- SolrRowCursor(final Iterator<SolrResultRow> it, QueryEngineSettings
settings) {
+ SolrRowCursor(final Iterator<SolrResultRow> it, IndexPlan plan,
QueryEngineSettings settings) {
Iterator<String> pathIterator = new Iterator<String>() {
@Override
@@ -512,7 +513,8 @@ public class SolrQueryIndex implements F
}
};
- pathCursor = new Cursors.PathCursor(pathIterator, true, settings);
+ this.plan = plan;
+ this.pathCursor = new Cursors.PathCursor(pathIterator, true,
settings);
}
@@ -554,7 +556,28 @@ public class SolrQueryIndex implements F
@Override
public long getSize(SizePrecision precision, long max) {
- return -1;
+ long estimate = -1;
+ switch (precision) {
+ case EXACT:
+ // query solr
+ SolrQuery countQuery =
FilterQueryParser.getQuery(plan.getFilter(), null,
SolrQueryIndex.this.configuration);
+ countQuery.setRows(0);
+ try {
+ estimate =
SolrQueryIndex.this.solrServer.query(countQuery).getResults().getNumFound();
+ } catch (SolrServerException e) {
+ log.warn("could not perform count query {}",
countQuery);
+ }
+ break;
+ case APPROXIMATION:
+ // estimate result size
+ estimate =
SolrQueryIndex.this.estimator.estimate(plan.getFilter());
+ break;
+ case FAST_APPROXIMATION:
+ // use already computed index plan's estimate
+ estimate = plan.getEstimatedEntryCount();
+ break;
+ }
+ return Math.min(estimate, max);
}
}
Modified:
jackrabbit/oak/branches/1.2/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java?rev=1687245&r1=1687244&r2=1687245&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java
Wed Jun 24 12:18:11 2015
@@ -22,6 +22,7 @@ import java.util.Collections;
import javax.annotation.Nonnull;
+import org.apache.jackrabbit.oak.api.Result;
import org.apache.jackrabbit.oak.plugins.index.solr.TestUtils;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.DefaultSolrConfiguration;
import
org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
@@ -402,6 +403,30 @@ public class SolrQueryIndexTest {
FilterImpl filter = new FilterImpl(selector, sqlQuery, new
QueryEngineSettings());
Cursor cursor = solrQueryIndex.query(filter, root);
assertNotNull(cursor);
+ }
+ @Test
+ public void testSize() throws Exception {
+ NodeState root = mock(NodeState.class);
+
when(root.getNames(any(String.class))).thenReturn(Collections.<String>emptySet());
+ SelectorImpl selector = new SelectorImpl(root, "a");
+ String sqlQuery = "select [jcr:path], [jcr:score] from [nt:base] as a
where" +
+ " contains([jcr:content/*], 'founded')";
+ SolrServer solrServer = TestUtils.createSolrServer();
+ OakSolrConfiguration configuration = new DefaultSolrConfiguration() {
+ @Override
+ public boolean useForPropertyRestrictions() {
+ return true;
+ }
+ };
+ SolrQueryIndex solrQueryIndex = new SolrQueryIndex("solr", solrServer,
configuration);
+ FilterImpl filter = new FilterImpl(selector, sqlQuery, new
QueryEngineSettings());
+ Cursor cursor = solrQueryIndex.query(filter, root);
+ assertNotNull(cursor);
+ long sizeExact = cursor.getSize(Result.SizePrecision.EXACT, 100000);
+ long sizeApprox = cursor.getSize(Result.SizePrecision.APPROXIMATION,
100000);
+ long sizeFastApprox =
cursor.getSize(Result.SizePrecision.FAST_APPROXIMATION, 100000);
+ assertTrue(Math.abs(sizeExact - sizeApprox) < 10);
+ assertTrue(Math.abs(sizeExact - sizeFastApprox) > 10000);
}
}