You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mv...@apache.org on 2012/03/20 18:05:06 UTC
svn commit: r1303002 - in /lucene/dev/trunk: lucene/contrib/CHANGES.txt
modules/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
Author: mvg
Date: Tue Mar 20 17:05:05 2012
New Revision: 1303002
URL: http://svn.apache.org/viewvc?rev=1303002&view=rev
Log:
LUCENE-3890: Fixed NPE for grouped faceting on multi-valued fields
Modified:
lucene/dev/trunk/lucene/contrib/CHANGES.txt
lucene/dev/trunk/modules/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
Modified: lucene/dev/trunk/lucene/contrib/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/CHANGES.txt?rev=1303002&r1=1303001&r2=1303002&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/contrib/CHANGES.txt Tue Mar 20 17:05:05 2012
@@ -105,6 +105,9 @@ Bug Fixes
* LUCENE-3045: fixed QueryNodeImpl.containsTag(String key) that was
not lowercasing the key before checking for the tag (Adriano Crestani)
+ * LUCENE-3890: Fixed NPE for grouped faceting on multi-valued fields.
+ (Michael McCandless, Martijn van Groningen)
+
Optimizations
* LUCENE-3468: Replaced last() and remove() with pollLast() in
Modified: lucene/dev/trunk/modules/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java?rev=1303002&r1=1303001&r2=1303002&view=diff
==============================================================================
--- lucene/dev/trunk/modules/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java (original)
+++ lucene/dev/trunk/modules/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java Tue Mar 20 17:05:05 2012
@@ -187,12 +187,14 @@ public abstract class TermGroupFacetColl
public void collect(int doc) throws IOException {
int groupOrd = groupFieldTermsIndex.getOrd(doc);
- reuse = facetFieldDocTermOrds.lookup(doc, reuse);
+ if (facetOrdTermsEnum != null) {
+ reuse = facetFieldDocTermOrds.lookup(doc, reuse);
+ }
int chunk;
boolean first = true;
int[] buffer = new int[5];
do {
- chunk = reuse.read(buffer);
+ chunk = reuse != null ? reuse.read(buffer) : 0;
if (first && chunk == 0) {
chunk = 1;
buffer[0] = facetFieldDocTermOrds.numTerms(); // this facet ord is reserved for docs not containing facet field.
@@ -246,7 +248,7 @@ public abstract class TermGroupFacetColl
int facetOrd;
if (groupedFacetHit.facetValue != null) {
- if (!facetOrdTermsEnum.seekExact(groupedFacetHit.facetValue, true)) {
+ if (facetOrdTermsEnum == null || !facetOrdTermsEnum.seekExact(groupedFacetHit.facetValue, true)) {
continue;
}
facetOrd = (int) facetOrdTermsEnum.ord();
@@ -260,7 +262,13 @@ public abstract class TermGroupFacetColl
}
if (facetPrefix != null) {
- TermsEnum.SeekStatus seekStatus = facetOrdTermsEnum.seekCeil(facetPrefix, true);
+ TermsEnum.SeekStatus seekStatus;
+ if (facetOrdTermsEnum != null) {
+ seekStatus = facetOrdTermsEnum.seekCeil(facetPrefix, true);
+ } else {
+ seekStatus = TermsEnum.SeekStatus.END;
+ }
+
if (seekStatus != TermsEnum.SeekStatus.END) {
startFacetOrd = (int) facetOrdTermsEnum.ord();
} else {
@@ -296,8 +304,10 @@ public abstract class TermGroupFacetColl
endFacetOrd == missingCountIndex + 1 ? missingCountIndex : endFacetOrd);
this.tenum = tenum;
this.mergePos = startFacetOrd;
- tenum.seekExact(mergePos);
- mergeTerm = tenum.term();
+ if (tenum != null) {
+ tenum.seekExact(mergePos);
+ mergeTerm = tenum.term();
+ }
}
protected void nextTerm() throws IOException {