mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-07 21:48:39 +00:00
Remove per-doc ord collector callback infavor of an iterator
This commit is contained in:
parent
c390f9b1a9
commit
7a36bed031
@ -128,10 +128,5 @@ public class DocIdOrdinals implements Ordinals {
|
||||
public Iter getIter(int docId) {
|
||||
return iter.reset(docId + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc) {
|
||||
proc.onOrdinal(docId, docId + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -120,9 +120,5 @@ public class EmptyOrdinals implements Ordinals {
|
||||
return EmptyIter.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc) {
|
||||
proc.onOrdinal(docId, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -163,18 +163,6 @@ public final class MultiFlatArrayOrdinals implements Ordinals {
|
||||
return iter.reset(docId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc) {
|
||||
for (int i = 0; i < ordinals.length; i++) {
|
||||
int ordinal = ordinals[i][docId];
|
||||
if (ordinal == 0) {
|
||||
if (i == 0) proc.onOrdinal(docId, 0);
|
||||
return;
|
||||
}
|
||||
proc.onOrdinal(docId, ordinal);
|
||||
}
|
||||
}
|
||||
|
||||
public static class IterImpl implements Docs.Iter {
|
||||
|
||||
private final int[][] ordinals;
|
||||
|
@ -119,15 +119,6 @@ public interface Ordinals {
|
||||
*/
|
||||
Iter getIter(int docId);
|
||||
|
||||
/**
|
||||
* Iterates over the ordinals associated with a docId. If there are no values,
|
||||
* a callback with a value 0 will be done.
|
||||
*/
|
||||
void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc);
|
||||
|
||||
public static interface OrdinalInDocProc {
|
||||
void onOrdinal(int docId, int ordinal);
|
||||
}
|
||||
|
||||
/**
|
||||
* An iterator over ordinals values.
|
||||
|
@ -143,9 +143,5 @@ public class SingleArrayOrdinals implements Ordinals {
|
||||
return iter.reset(ordinals[docId]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc) {
|
||||
proc.onOrdinal(docId, ordinals[docId]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -147,9 +147,5 @@ public class SinglePackedOrdinals implements Ordinals {
|
||||
return iter.reset((int) reader.get(docId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc) {
|
||||
proc.onOrdinal(docId, (int) reader.get(docId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -180,19 +180,6 @@ public final class SparseMultiArrayOrdinals implements Ordinals {
|
||||
return iter.reset(docId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachOrdinalInDoc(int docId, OrdinalInDocProc proc) {
|
||||
int pointer = lookup[docId];
|
||||
if (pointer >= 0) {
|
||||
proc.onOrdinal(docId, pointer);
|
||||
} else {
|
||||
pool.fill(spare, -(pointer + 1));
|
||||
for (int i = spare.offset; i < spare.length + spare.offset; i++) {
|
||||
proc.onOrdinal(docId, spare.ints[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class IterImpl implements Docs.Iter {
|
||||
private final int[] lookup;
|
||||
private final PositiveIntPool pool;
|
||||
|
@ -30,6 +30,7 @@ import org.elasticsearch.common.collect.BoundedTreeSet;
|
||||
import org.elasticsearch.index.fielddata.BytesValues;
|
||||
import org.elasticsearch.index.fielddata.IndexFieldData;
|
||||
import org.elasticsearch.index.fielddata.ordinals.Ordinals;
|
||||
import org.elasticsearch.index.fielddata.ordinals.Ordinals.Docs.Iter;
|
||||
import org.elasticsearch.search.facet.FacetExecutor;
|
||||
import org.elasticsearch.search.facet.InternalFacet;
|
||||
import org.elasticsearch.search.facet.terms.TermsFacet;
|
||||
@ -198,6 +199,7 @@ public class TermsStringOrdinalsFacetExecutor extends FacetExecutor {
|
||||
private long total;
|
||||
private BytesValues.WithOrdinals values;
|
||||
private ReaderAggregator current;
|
||||
private Ordinals.Docs ordinals;
|
||||
|
||||
@Override
|
||||
public void setNextReader(AtomicReaderContext context) throws IOException {
|
||||
@ -210,11 +212,17 @@ public class TermsStringOrdinalsFacetExecutor extends FacetExecutor {
|
||||
}
|
||||
values = indexFieldData.load(context).getBytesValues();
|
||||
current = new ReaderAggregator(values, ordinalsCacheAbove);
|
||||
ordinals = values.ordinals();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collect(int doc) throws IOException {
|
||||
values.ordinals().forEachOrdinalInDoc(doc, current);
|
||||
Iter iter = ordinals.getIter(doc);
|
||||
int ord = iter.next();
|
||||
current.onOrdinal(doc, ord);
|
||||
while((ord = iter.next()) != 0) {
|
||||
current.onOrdinal(doc, ord);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -233,7 +241,7 @@ public class TermsStringOrdinalsFacetExecutor extends FacetExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
public static class ReaderAggregator implements Ordinals.Docs.OrdinalInDocProc {
|
||||
public static final class ReaderAggregator {
|
||||
|
||||
final BytesValues.WithOrdinals values;
|
||||
final int[] counts;
|
||||
@ -254,8 +262,7 @@ public class TermsStringOrdinalsFacetExecutor extends FacetExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOrdinal(int docId, int ordinal) {
|
||||
final void onOrdinal(int docId, int ordinal) {
|
||||
counts[ordinal]++;
|
||||
total++;
|
||||
}
|
||||
|
@ -122,7 +122,6 @@ public abstract class MultiOrdinalsTests {
|
||||
array[i] = docOrds.get(i);
|
||||
}
|
||||
assertIter(docs.getIter(docId), array);
|
||||
docs.forEachOrdinalInDoc(docId, assertOrdinalInProcDoc(array));
|
||||
}
|
||||
for (int i = docId + 1; i < ordAndId.id; i++) {
|
||||
assertThat(docs.getOrd(i), equalTo(0));
|
||||
@ -210,7 +209,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.ints[1], equalTo(4));
|
||||
assertThat(ref.length, equalTo(2));
|
||||
assertIter(docs.getIter(0), 2, 4);
|
||||
docs.forEachOrdinalInDoc(0, assertOrdinalInProcDoc(2, 4));
|
||||
|
||||
// Document 2
|
||||
assertThat(docs.getOrd(1), equalTo(1));
|
||||
@ -219,7 +217,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.ints[0], equalTo(1));
|
||||
assertThat(ref.length, equalTo(1));
|
||||
assertIter(docs.getIter(1), 1);
|
||||
docs.forEachOrdinalInDoc(1, assertOrdinalInProcDoc(1));
|
||||
|
||||
// Document 3
|
||||
assertThat(docs.getOrd(2), equalTo(3));
|
||||
@ -228,7 +225,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.ints[0], equalTo(3));
|
||||
assertThat(ref.length, equalTo(1));
|
||||
assertIter(docs.getIter(2), 3);
|
||||
docs.forEachOrdinalInDoc(2, assertOrdinalInProcDoc(3));
|
||||
|
||||
// Document 4
|
||||
assertThat(docs.getOrd(3), equalTo(0));
|
||||
@ -236,7 +232,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.offset, equalTo(0));
|
||||
assertThat(ref.length, equalTo(0));
|
||||
assertIter(docs.getIter(3));
|
||||
docs.forEachOrdinalInDoc(3, assertOrdinalInProcDoc(0));
|
||||
|
||||
// Document 5
|
||||
assertThat(docs.getOrd(4), equalTo(1));
|
||||
@ -249,7 +244,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.ints[4], equalTo(6));
|
||||
assertThat(ref.length, equalTo(5));
|
||||
assertIter(docs.getIter(4), 1, 3, 4, 5, 6);
|
||||
docs.forEachOrdinalInDoc(4, assertOrdinalInProcDoc(1, 3, 4, 5, 6));
|
||||
|
||||
// Document 6
|
||||
assertThat(docs.getOrd(5), equalTo(1));
|
||||
@ -261,7 +255,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.ints[i], equalTo(i + 1));
|
||||
}
|
||||
assertIter(docs.getIter(5), expectedOrds);
|
||||
docs.forEachOrdinalInDoc(5, assertOrdinalInProcDoc(expectedOrds));
|
||||
assertThat(ref.length, equalTo(maxOrds));
|
||||
|
||||
// Document 7
|
||||
@ -274,7 +267,6 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(ref.ints[i], equalTo(i + 1));
|
||||
}
|
||||
assertIter(docs.getIter(6), expectedOrds);
|
||||
docs.forEachOrdinalInDoc(6, assertOrdinalInProcDoc(expectedOrds));
|
||||
assertThat(ref.length, equalTo(maxOrds));
|
||||
}
|
||||
|
||||
@ -286,23 +278,4 @@ public abstract class MultiOrdinalsTests {
|
||||
assertThat(iter.next(), equalTo(0)); // Just checking it stays 0
|
||||
}
|
||||
|
||||
protected static Ordinals.Docs.OrdinalInDocProc assertOrdinalInProcDoc(int... expectedOrdinals) {
|
||||
return new AssertingOrdinalInDocProc(expectedOrdinals);
|
||||
}
|
||||
|
||||
static class AssertingOrdinalInDocProc implements Ordinals.Docs.OrdinalInDocProc {
|
||||
|
||||
private final int[] expectedOrdinals;
|
||||
private int index = 0;
|
||||
|
||||
AssertingOrdinalInDocProc(int... expectedOrdinals) {
|
||||
this.expectedOrdinals = expectedOrdinals;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOrdinal(int docId, int ordinal) {
|
||||
assertThat(ordinal, equalTo(expectedOrdinals[index++]));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user