You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by to...@apache.org on 2014/12/19 17:59:32 UTC
svn commit: r1646795 - in
/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query:
AdvancedSolrQueryIndex.java FilterQueryParser.java SolrQueryIndex.java
Author: tommaso
Date: Fri Dec 19 16:59:32 2014
New Revision: 1646795
URL: http://svn.apache.org/r1646795
Log:
OAK-2168 - updated estimates upon result counts available
Modified:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/AdvancedSolrQueryIndex.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/AdvancedSolrQueryIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/AdvancedSolrQueryIndex.java?rev=1646795&r1=1646794&r2=1646795&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/AdvancedSolrQueryIndex.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/AdvancedSolrQueryIndex.java Fri Dec 19 16:59:32 2014
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
+import org.apache.solr.common.SolrDocumentList;
/**
* {@link org.apache.jackrabbit.oak.spi.query.QueryIndex.AdvanceFulltextQueryIndex} implementation of a Solr
@@ -70,20 +71,20 @@ public class AdvancedSolrQueryIndex exte
String key = filter.toString();
long cachedEstimate = cache.get(key) != null ? cache.get(key) : -1;
long estimatedEntryCount;
- if (cachedEstimate > 0) {
+ if (cachedEstimate >= 0) {
estimatedEntryCount = cachedEstimate;
} else {
- Long updatedEstimation = updateEstimation();
+ Long updatedEstimation = initializeEstimation(filter);
cache.put(key, updatedEstimation);
estimatedEntryCount = updatedEstimation;
}
return estimatedEntryCount;
}
- private Long updateEstimation() {
+ private Long initializeEstimation(Filter filter) {
SolrQuery solrQuery = new SolrQuery("*:*");
try {
- return solrServer.query(solrQuery).getResults().getNumFound();
+ return solrServer.query(solrQuery).getResults().getNumFound() / 3; // 33% of the docs is a reasonable worst case
} catch (Exception e) {
return Long.MAX_VALUE;
}
@@ -100,6 +101,12 @@ public class AdvancedSolrQueryIndex exte
}
@Override
+ void onRetrievedResults(Filter filter, SolrDocumentList docs) {
+ // update estimates cache
+ cache.put(filter.toString(), docs.getNumFound());
+ }
+
+ @Override
public String getPlanDescription(IndexPlan plan, NodeState root) {
return plan.toString();
}
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java?rev=1646795&r1=1646794&r2=1646795&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java Fri Dec 19 16:59:32 2014
@@ -34,7 +34,7 @@ import static org.apache.jackrabbit.oak.
/**
* the {@link org.apache.jackrabbit.oak.plugins.index.solr.query.FilterQueryParser} can parse {@link org.apache.jackrabbit.oak.spi.query.Filter}s
- * and transform them into Solr query {@code String}s.
+ * and transform them into {@link org.apache.solr.client.solrj.SolrQuery}s and / or Solr query {@code String}s.
*/
class FilterQueryParser {
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=1646795&r1=1646794&r2=1646795&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 Dec 19 16:59:32 2014
@@ -94,7 +94,9 @@ public class SolrQueryIndex implements F
public double getCost(Filter filter, NodeState root) {
// cost is inverse proportional to the number of matching restrictions, infinite if no restriction matches
double cost = 10d / getMatchingFilterRestrictions(filter);
- log.debug("Solr: cost for {}Â is {}", name, cost);
+ if (log.isDebugEnabled()) {
+ log.debug("Solr: cost for {}Â is {}", name, cost);
+ }
return cost;
}
@@ -192,7 +194,7 @@ public class SolrQueryIndex implements F
private final Set<String> seenPaths = Sets.newHashSet();
private final Deque<SolrResultRow> queue = Queues.newArrayDeque();
private SolrDocument lastDoc;
- public int offset = 0;
+ private int offset = 0;
@Override
protected SolrResultRow computeNext() {
@@ -249,6 +251,8 @@ public class SolrQueryIndex implements F
}
SolrDocumentList docs = solrServer.query(query).getResults();
+ onRetrievedResults(filter, docs);
+
if (log.isDebugEnabled()) {
log.debug("getting docs {}", docs);
}
@@ -257,7 +261,6 @@ public class SolrQueryIndex implements F
SolrResultRow row = convertToRow(doc);
if (row != null) {
queue.add(row);
- log.debug("added {}", row.path);
}
lastDocToRecord = doc;
}
@@ -280,6 +283,10 @@ public class SolrQueryIndex implements F
return cursor;
}
+ void onRetrievedResults(Filter filter, SolrDocumentList docs) {
+ // do nothing
+ }
+
private boolean exists(SolrResultRow row, NodeState root) {
boolean result = true;
NodeState nodeState = root;