You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/09/06 14:11:42 UTC

svn commit: r1381568 - in /lucene/dev/trunk/solr: CHANGES.txt core/src/java/org/apache/solr/request/UnInvertedField.java core/src/test/org/apache/solr/request/SimpleFacetsTest.java

Author: yonik
Date: Thu Sep  6 12:11:41 2012
New Revision: 1381568

URL: http://svn.apache.org/viewvc?rev=1381568&view=rev
Log:
SOLR-3793: use livedocs when caching big terms

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/UnInvertedField.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1381568&r1=1381567&r2=1381568&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Thu Sep  6 12:11:41 2012
@@ -124,6 +124,12 @@ Bug Fixes
 
 * SOLR-3668: DataImport : Specifying Custom Parameters (steffkes)
 
+* SOLR-3793: UnInvertedField faceting cached big terms in the filter
+  cache that ignored deletions, leading to duplicate documents in search
+  later when a filter of the same term was specified.
+  (Günter Hipler, hossman, yonik)
+
+
 Other Changes
 ----------------------
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/UnInvertedField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/UnInvertedField.java?rev=1381568&r1=1381567&r2=1381568&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/UnInvertedField.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/UnInvertedField.java Thu Sep  6 12:11:41 2012
@@ -125,11 +125,12 @@ public class UnInvertedField extends Doc
       if (deState == null) {
         deState = new SolrIndexSearcher.DocsEnumState();
         deState.fieldName = field;
-        // deState.termsEnum = te.tenum;
+        deState.liveDocs = searcher.getAtomicReader().getLiveDocs();
         deState.termsEnum = te;  // TODO: check for MultiTermsEnum in SolrIndexSearcher could now fail?
         deState.docsEnum = docsEnum;
         deState.minSetSizeCached = maxTermDocFreq;
       }
+
       docsEnum = deState.docsEnum;
       DocSet set = searcher.getDocSet(deState);
       maxTermCounts[termNum] = set.size();

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=1381568&r1=1381567&r2=1381568&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java Thu Sep  6 12:11:41 2012
@@ -83,27 +83,39 @@ public class SimpleFacetsTest extends So
     add_doc("id", "42", 
             "range_facet_f", "35.3", 
             "trait_s", "Tool", "trait_s", "Obnoxious",
-            "name", "Zapp Brannigan");
+            "name", "Zapp Brannigan",
+             "foo_s","A", "foo_s","B"
+    );
     add_doc("id", "43" ,
             "range_facet_f", "28.789", 
-            "title", "Democratic Order of Planets");
+            "title", "Democratic Order of Planets",
+            "foo_s","A", "foo_s","B"
+    );
     add_doc("id", "44", 
             "range_facet_f", "15.97", 
             "trait_s", "Tool",
-            "name", "The Zapper");
+            "name", "The Zapper",
+            "foo_s","A", "foo_s","B", "foo_s","C"
+    );
     add_doc("id", "45", 
             "range_facet_f", "30.0", 
             "trait_s", "Chauvinist",
-            "title", "25 star General");
+            "title", "25 star General",
+            "foo_s","A", "foo_s","B"
+    );
     add_doc("id", "46", 
             "range_facet_f", "20.0", 
             "trait_s", "Obnoxious",
-            "subject", "Defeated the pacifists of the Gandhi nebula");
+            "subject", "Defeated the pacifists of the Gandhi nebula",
+            "foo_s","A", "foo_s","B"
+    );
     add_doc("id", "47", 
             "range_facet_f", "28.62", 
             "trait_s", "Pig",
             "text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!",
-            "zerolen_s","");   
+            "zerolen_s","",
+            "foo_s","A", "foo_s","B", "foo_s","C"
+    );
   }
 
   static void indexSimpleGroupedFacetCounts() {
@@ -115,6 +127,28 @@ public class SimpleFacetsTest extends So
   }
 
   @Test
+  public void testCachingBigTerms() throws Exception {
+    assertQ( req("indent","true", "q", "id:[42 TO 47]",
+            "facet", "true",
+            "facet.field", "foo_s"  // big terms should cause foo_s:A to be cached
+             ),
+        "*[count(//doc)=6]"
+    );
+
+    // now use the cached term as a filter to make sure deleted docs are accounted for
+    assertQ( req("indent","true", "fl","id", "q", "foo_s:B",
+        "facet", "true",
+        "facet.field", "foo_s",
+        "fq","foo_s:A"
+    ),
+        "*[count(//doc)=6]"
+    );
+
+
+  }
+
+
+  @Test
   public void testSimpleGroupedQueryRangeFacets() throws Exception {
     assertQ(
         req(