summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java')
-rw-r--r--core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java30
1 files changed, 22 insertions, 8 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java b/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java
index 7c03e1a794..2df5aa6bb6 100644
--- a/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java
+++ b/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractAtomicParentChildFieldData.java
@@ -28,6 +28,7 @@ import org.elasticsearch.index.fielddata.AtomicParentChildFieldData;
import org.elasticsearch.index.fielddata.ScriptDocValues;
import org.elasticsearch.index.fielddata.SortedBinaryDocValues;
+import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
@@ -46,16 +47,28 @@ abstract class AbstractAtomicParentChildFieldData implements AtomicParentChildFi
public final SortedBinaryDocValues getBytesValues() {
return new SortedBinaryDocValues() {
+ private final SortedDocValues[] perTypeValues;
private final BytesRef[] terms = new BytesRef[2];
private int count;
+ private int termsCursor;
+
+ {
+ Set<String> types = types();
+ perTypeValues = new SortedDocValues[types.size()];
+ int i = 0;
+ for (String type : types) {
+ perTypeValues[i++] = getOrdinalsValues(type);
+ }
+ }
@Override
- public void setDocument(int docId) {
+ public boolean advanceExact(int docId) throws IOException {
count = 0;
- for (String type : types()) {
- final SortedDocValues values = getOrdinalsValues(type);
- final int ord = values.getOrd(docId);
- if (ord >= 0) {
+ termsCursor = 0;
+
+ for (SortedDocValues values : perTypeValues) {
+ if (values.advanceExact(docId)) {
+ final int ord = values.ordValue();
terms[count++] = values.lookupOrd(ord);
}
}
@@ -69,16 +82,17 @@ abstract class AbstractAtomicParentChildFieldData implements AtomicParentChildFi
count = 1;
}
}
+ return count != 0;
}
@Override
- public int count() {
+ public int docValueCount() {
return count;
}
@Override
- public BytesRef valueAt(int index) {
- return terms[index];
+ public BytesRef nextValue() throws IOException {
+ return terms[termsCursor++];
}
};
}