mirror of https://github.com/apache/lucene.git
CountingFacetsCollector did not sort the nodes when FacetRequest.getNumResults was > taxoReader.getSize()
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1437867 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ee97b7a489
commit
956d884778
|
@ -3,6 +3,8 @@ package org.apache.lucene.facet.search;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
@ -265,6 +267,17 @@ public class CountingFacetsCollector extends FacetsCollector {
|
||||||
}
|
}
|
||||||
child = siblings[child];
|
child = siblings[child];
|
||||||
}
|
}
|
||||||
|
Collections.sort(nodes, new Comparator<FacetResultNode>() {
|
||||||
|
@Override
|
||||||
|
public int compare(FacetResultNode o1, FacetResultNode o2) {
|
||||||
|
int value = (int) (o2.value - o1.value);
|
||||||
|
if (value == 0) {
|
||||||
|
value = o2.ordinal - o1.ordinal;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
root.subResults = nodes;
|
root.subResults = nodes;
|
||||||
res.add(new FacetResult(fr, root, nodes.size()));
|
res.add(new FacetResult(fr, root, nodes.size()));
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -351,8 +351,16 @@ public class CountingFacetsCollectorTest extends LuceneTestCase {
|
||||||
for (FacetResult res : facetResults) {
|
for (FacetResult res : facetResults) {
|
||||||
FacetResultNode root = res.getFacetResultNode();
|
FacetResultNode root = res.getFacetResultNode();
|
||||||
assertEquals("wrong count for " + root.label, allExpectedCounts.get(root.label), (int) root.value);
|
assertEquals("wrong count for " + root.label, allExpectedCounts.get(root.label), (int) root.value);
|
||||||
|
int prevValue = Integer.MAX_VALUE;
|
||||||
|
int prevOrdinal = Integer.MAX_VALUE;
|
||||||
for (FacetResultNode child : root.subResults) {
|
for (FacetResultNode child : root.subResults) {
|
||||||
assertEquals("wrong count for " + child.label, allExpectedCounts.get(child.label), (int) child.value);
|
assertEquals("wrong count for " + child.label, allExpectedCounts.get(child.label), (int) child.value);
|
||||||
|
assertTrue("wrong sort order of sub results: child.value=" + child.value + " prevValue=" + prevValue, child.value <= prevValue);
|
||||||
|
if (child.value == prevValue) {
|
||||||
|
assertTrue("wrong sort order of sub results", child.ordinal < prevOrdinal);
|
||||||
|
}
|
||||||
|
prevValue = (int) child.value;
|
||||||
|
prevOrdinal = child.ordinal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue