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/02/21 21:52:54 UTC
svn commit: r1292007 - in /lucene/dev/trunk/solr/core/src:
java/org/apache/solr/request/UnInvertedField.java
test/org/apache/solr/request/SimpleFacetsTest.java
Author: yonik
Date: Tue Feb 21 20:52:54 2012
New Revision: 1292007
URL: http://svn.apache.org/viewvc?rev=1292007&view=rev
Log:
SOLR-3150: NPE when facetting using facet.prefix on an empty field
Modified:
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/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=1292007&r1=1292006&r2=1292007&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 Tue Feb 21 20:52:54 2012
@@ -227,7 +227,7 @@ public class UnInvertedField extends Doc
int endTerm = numTermsInField; // one past the end
TermsEnum te = getOrdTermsEnum(searcher.getAtomicReader());
- if (prefix != null && prefix.length() > 0) {
+ if (te != null && prefix != null && prefix.length() > 0) {
final BytesRef prefixBr = new BytesRef(prefix);
if (te.seekCeil(prefixBr, true) == TermsEnum.SeekStatus.END) {
startTerm = numTermsInField;
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=1292007&r1=1292006&r2=1292007&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 Tue Feb 21 20:52:54 2012
@@ -17,12 +17,17 @@
package org.apache.solr.request;
+import org.apache.noggit.ObjectBuilder;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.schema.SchemaField;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
+import java.util.Map;
public class SimpleFacetsTest extends SolrTestCaseJ4 {
@@ -53,7 +58,9 @@ public class SimpleFacetsTest extends So
}
- static void createIndex() {
+ static void createIndex() throws Exception {
+ doEmptyFacetCounts(); // try on empty index
+
indexSimpleFacetCounts();
indexDateFacets();
indexFacetSingleValued();
@@ -96,6 +103,67 @@ public class SimpleFacetsTest extends So
}
@Test
+ public void testEmptyFacetCounts() throws Exception {
+ doEmptyFacetCounts();
+ }
+
+ // static so we can try both with and without an empty index
+ static void doEmptyFacetCounts() throws Exception {
+ doEmptyFacetCounts("empty_t", new String[]{null, "myprefix",""});
+ doEmptyFacetCounts("empty_i", new String[]{null});
+ doEmptyFacetCounts("empty_f", new String[]{null});
+ doEmptyFacetCounts("empty_s", new String[]{null, "myprefix",""});
+ doEmptyFacetCounts("empty_d", new String[]{null});
+ }
+
+ static void doEmptyFacetCounts(String field, String[] prefixes) throws Exception {
+ SchemaField sf = h.getCore().getSchema().getField(field);
+
+ String response = JQ(req("q", "*:*"));
+ Map rsp = (Map) ObjectBuilder.fromJSON(response);
+ Long numFound = (Long)(((Map)rsp.get("response")).get("numFound"));
+
+ ModifiableSolrParams params = params("q","*:*", "rows","0", "facet","true", "facet.field","{!key=myalias}"+field);
+
+ String[] methods = {null, "fc","enum","fcs"};
+ if (sf.multiValued() || sf.getType().multiValuedFieldCache()) {
+ methods = new String[]{null, "fc","enum"};
+ }
+
+ prefixes = prefixes==null ? new String[]{null} : prefixes;
+
+
+ for (String method : methods) {
+ if (method == null) {
+ params.remove("facet.method");
+ } else {
+ params.set("facet.method", method);
+ }
+ for (String prefix : prefixes) {
+ if (prefix == null) {
+ params.remove("facet.prefix");
+ } else {
+ params.set("facet.prefix", prefix);
+ }
+
+ for (String missing : new String[] {null, "true"}) {
+ if (missing == null) {
+ params.remove("facet.missing");
+ } else {
+ params.set("facet.missing", missing);
+ }
+
+ String expected = missing==null ? "[]" : "[null," + numFound + "]";
+
+ assertJQ(req(params),
+ "/facet_counts/facet_fields/myalias==" + expected);
+ }
+ }
+ }
+ }
+
+
+ @Test
public void testSimpleFacetCounts() {
assertQ("standard request handler returns all matches",