Skip to content

Commit f1f3c24

Browse files
ubonesskimchy
authored andcommitted
short field data implementation
1 parent 3840439 commit f1f3c24

File tree

7 files changed

+1221
-6
lines changed

7 files changed

+1221
-6
lines changed

src/main/java/org/elasticsearch/index/fielddata/IndexFieldDataService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class IndexFieldDataService extends AbstractIndexComponent {
4747
.put("string", new ConcreteBytesRefIndexFieldData.Builder())
4848
.put("float", new FloatArrayIndexFieldData.Builder())
4949
.put("double", new DoubleArrayIndexFieldData.Builder())
50+
.put("short", new ShortArrayIndexFieldData.Builder())
5051
.put("int", new IntArrayIndexFieldData.Builder())
5152
.put("long", new LongArrayIndexFieldData.Builder())
5253
.put("geo_point", new GeoPointDoubleArrayIndexFieldData.Builder())
@@ -56,6 +57,7 @@ public class IndexFieldDataService extends AbstractIndexComponent {
5657
.put(Tuple.tuple("string", "concrete_bytes"), new ConcreteBytesRefIndexFieldData.Builder())
5758
.put(Tuple.tuple("float", "array"), new FloatArrayIndexFieldData.Builder())
5859
.put(Tuple.tuple("double", "array"), new DoubleArrayIndexFieldData.Builder())
60+
.put(Tuple.tuple("short", "array"), new ShortArrayIndexFieldData.Builder())
5961
.put(Tuple.tuple("int", "array"), new IntArrayIndexFieldData.Builder())
6062
.put(Tuple.tuple("long", "array"), new LongArrayIndexFieldData.Builder())
6163
.put(Tuple.tuple("geo_point", "array"), new GeoPointDoubleArrayIndexFieldData.Builder())

src/main/java/org/elasticsearch/index/fielddata/StringValues.java

Lines changed: 95 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@
2020
package org.elasticsearch.index.fielddata;
2121

2222
import org.elasticsearch.ElasticSearchIllegalStateException;
23-
import org.elasticsearch.index.fielddata.util.FloatArrayRef;
24-
import org.elasticsearch.index.fielddata.util.IntArrayRef;
25-
import org.elasticsearch.index.fielddata.util.LongArrayRef;
26-
import org.elasticsearch.index.fielddata.util.StringArrayRef;
23+
import org.elasticsearch.index.fielddata.util.*;
2724

2825
/**
2926
*/
@@ -103,6 +100,100 @@ public String next() {
103100
}
104101
}
105102

103+
public static class ShortBased implements StringValues {
104+
105+
private final ShortValues values;
106+
107+
private final StringArrayRef arrayScratch = new StringArrayRef(new String[1], 1);
108+
private final ValuesIter valuesIter = new ValuesIter();
109+
private final Proc proc = new Proc();
110+
111+
public ShortBased(ShortValues values) {
112+
this.values = values;
113+
}
114+
115+
@Override
116+
public boolean isMultiValued() {
117+
return values.isMultiValued();
118+
}
119+
120+
@Override
121+
public boolean hasValue(int docId) {
122+
return values.hasValue(docId);
123+
}
124+
125+
@Override
126+
public String getValue(int docId) {
127+
if (!values.hasValue(docId)) {
128+
return null;
129+
}
130+
return Short.toString(values.getValue(docId));
131+
}
132+
133+
@Override
134+
public StringArrayRef getValues(int docId) {
135+
ShortArrayRef arrayRef = values.getValues(docId);
136+
int size = arrayRef.size();
137+
if (size == 0) return StringArrayRef.EMPTY;
138+
139+
arrayScratch.reset(size);
140+
for (int i = arrayRef.start; i < arrayRef.end; i++) {
141+
arrayScratch.values[arrayScratch.end++] = Short.toString(arrayRef.values[i]);
142+
}
143+
return arrayScratch;
144+
}
145+
146+
@Override
147+
public Iter getIter(int docId) {
148+
return valuesIter.reset(values.getIter(docId));
149+
}
150+
151+
@Override
152+
public void forEachValueInDoc(int docId, ValueInDocProc proc) {
153+
values.forEachValueInDoc(docId, this.proc.reset(proc));
154+
}
155+
156+
static class ValuesIter implements Iter {
157+
158+
private ShortValues.Iter iter;
159+
160+
private ValuesIter reset(ShortValues.Iter iter) {
161+
this.iter = iter;
162+
return this;
163+
}
164+
165+
@Override
166+
public boolean hasNext() {
167+
return iter.hasNext();
168+
}
169+
170+
@Override
171+
public String next() {
172+
return Short.toString(iter.next());
173+
}
174+
}
175+
176+
static class Proc implements ShortValues.ValueInDocProc {
177+
178+
private ValueInDocProc proc;
179+
180+
private Proc reset(ValueInDocProc proc) {
181+
this.proc = proc;
182+
return this;
183+
}
184+
185+
@Override
186+
public void onValue(int docId, short value) {
187+
proc.onValue(docId, Short.toString(value));
188+
}
189+
190+
@Override
191+
public void onMissing(int docId) {
192+
proc.onMissing(docId);
193+
}
194+
}
195+
}
196+
106197
public static class IntBased implements StringValues {
107198

108199
private final IntValues values;

src/main/java/org/elasticsearch/index/fielddata/plain/FloatArrayAtomicFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ public boolean hasNext() {
416416
public double next() {
417417
float value = values[ord];
418418
ord = ordsIter.next();
419-
return value;
419+
return (double) value;
420420
}
421421
}
422422
}

0 commit comments

Comments
 (0)