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;