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(