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/08/28 13:13:43 UTC
svn commit: r1378078 - in /lucene/dev/branches/branch_4x/lucene: CHANGES.txt
grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java
Author: mvg
Date: Tue Aug 28 11:13:43 2012
New Revision: 1378078
URL: http://svn.apache.org/viewvc?rev=1378078&view=rev
Log:
LUCENE-4333: Fixed NPE in TermGroupFacetCollector when faceting on mv fields.
Modified:
lucene/dev/branches/branch_4x/lucene/CHANGES.txt
lucene/dev/branches/branch_4x/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
lucene/dev/branches/branch_4x/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1378078&r1=1378077&r2=1378078&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Tue Aug 28 11:13:43 2012
@@ -113,6 +113,9 @@ Bug Fixes
* LUCENE-4224: Add in-order scorer to query time joining and the
out-of-order scorer throws an UOE. (Martijn van Groningen, Robert Muir)
+* LUCENE-4333: Fixed NPE in TermGroupFacetCollector when faceting on mv fields.
+ (Jesse MacVicar, Martijn van Groningen)
+
Optimizations
* LUCENE-4317: Improve reuse of internal TokenStreams and StringReader
Modified: lucene/dev/branches/branch_4x/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java?rev=1378078&r1=1378077&r2=1378078&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java (original)
+++ lucene/dev/branches/branch_4x/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java Tue Aug 28 11:13:43 2012
@@ -186,6 +186,10 @@ public abstract class TermGroupFacetColl
}
public void collect(int doc) throws IOException {
+ if (facetFieldDocTermOrds.isEmpty()) {
+ return;
+ }
+
int groupOrd = groupFieldTermsIndex.getOrd(doc);
if (facetOrdTermsEnum != null) {
reuse = facetFieldDocTermOrds.lookup(doc, reuse);
@@ -240,6 +244,10 @@ public abstract class TermGroupFacetColl
segmentTotalCount = 0;
segmentGroupedFacetHits.clear();
+ if (facetFieldDocTermOrds.isEmpty()) {
+ return;
+ }
+
for (GroupedFacetHit groupedFacetHit : groupedFacetHits) {
int groupOrd = groupFieldTermsIndex.binarySearchLookup(groupedFacetHit.groupValue, spare);
if (groupOrd < 0) {
Modified: lucene/dev/branches/branch_4x/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java?rev=1378078&r1=1378077&r2=1378078&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java (original)
+++ lucene/dev/branches/branch_4x/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java Tue Aug 28 11:13:43 2012
@@ -19,10 +19,7 @@ package org.apache.lucene.search.groupin
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.*;
-import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.Term;
+import org.apache.lucene.index.*;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.TermQuery;
@@ -217,6 +214,82 @@ public class GroupFacetCollectorTest ext
dir.close();
}
+ public void testMVGroupedFacetingWithDeletes() throws Exception {
+ final String groupField = "hotel";
+ FieldType customType = new FieldType();
+ customType.setStored(true);
+
+ Directory dir = newDirectory();
+ RandomIndexWriter w = new RandomIndexWriter(
+ random(),
+ dir,
+ newIndexWriterConfig(TEST_VERSION_CURRENT,
+ new MockAnalyzer(random())).setMergePolicy(NoMergePolicy.COMPOUND_FILES));
+ boolean useDv = false;
+
+ // 0
+ Document doc = new Document();
+ addField(doc, "x", "x", useDv);
+ w.addDocument(doc);
+
+ doc = new Document();
+ addField(doc, groupField, "a", useDv);
+ addField(doc, "airport", "ams", useDv);
+ w.addDocument(doc);
+
+ w.commit();
+ w.deleteDocuments(new TermQuery(new Term("airport", "ams")));
+
+ // 0
+ doc = new Document();
+ addField(doc, groupField, "a", useDv);
+ addField(doc, "airport", "ams", useDv);
+ w.addDocument(doc);
+
+ // 1
+ doc = new Document();
+ addField(doc, groupField, "a", useDv);
+ addField(doc, "airport", "dus", useDv);
+ w.addDocument(doc);
+
+ // 2
+ doc = new Document();
+ addField(doc, groupField, "b", useDv);
+ addField(doc, "airport", "ams", useDv);
+ w.addDocument(doc);
+
+ // 3
+ doc = new Document();
+ addField(doc, groupField, "b", useDv);
+ addField(doc, "airport", "ams", useDv);
+ w.addDocument(doc);
+
+ // 4
+ doc = new Document();
+ addField(doc, groupField, "b", useDv);
+ addField(doc, "airport", "ams", useDv);
+ w.addDocument(doc);
+
+ w.commit();
+ w.close();
+ IndexSearcher indexSearcher = new IndexSearcher(DirectoryReader.open(dir));
+ AbstractGroupFacetCollector groupedAirportFacetCollector = createRandomCollector(groupField, "airport", null, true, useDv);
+ indexSearcher.search(new MatchAllDocsQuery(), groupedAirportFacetCollector);
+ TermGroupFacetCollector.GroupedFacetResult airportResult = groupedAirportFacetCollector.mergeSegmentResults(10, 0, false);
+ assertEquals(3, airportResult.getTotalCount());
+ assertEquals(0, airportResult.getTotalMissingCount());
+
+ List<TermGroupFacetCollector.FacetEntry> entries = airportResult.getFacetEntries(0, 10);
+ assertEquals(2, entries.size());
+ assertEquals("ams", entries.get(0).getValue().utf8ToString());
+ assertEquals(2, entries.get(0).getCount());
+ assertEquals("dus", entries.get(1).getValue().utf8ToString());
+ assertEquals(1, entries.get(1).getCount());
+
+ indexSearcher.getIndexReader().close();
+ dir.close();
+ }
+
private void addField(Document doc, String field, String value, boolean canUseIDV) {
doc.add(new StringField(field, value, Field.Store.NO));
if (canUseIDV) {