Skip to content

Commit 855b64a

Browse files
ubonesskimchy
authored andcommitted
byte field data implementation
1 parent f1f3c24 commit 855b64a

File tree

6 files changed

+1215
-1
lines changed

6 files changed

+1215
-1
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("byte", new ByteArrayIndexFieldData.Builder())
5051
.put("short", new ShortArrayIndexFieldData.Builder())
5152
.put("int", new IntArrayIndexFieldData.Builder())
5253
.put("long", new LongArrayIndexFieldData.Builder())
@@ -57,6 +58,7 @@ public class IndexFieldDataService extends AbstractIndexComponent {
5758
.put(Tuple.tuple("string", "concrete_bytes"), new ConcreteBytesRefIndexFieldData.Builder())
5859
.put(Tuple.tuple("float", "array"), new FloatArrayIndexFieldData.Builder())
5960
.put(Tuple.tuple("double", "array"), new DoubleArrayIndexFieldData.Builder())
61+
.put(Tuple.tuple("byte", "array"), new ByteArrayIndexFieldData.Builder())
6062
.put(Tuple.tuple("short", "array"), new ShortArrayIndexFieldData.Builder())
6163
.put(Tuple.tuple("int", "array"), new IntArrayIndexFieldData.Builder())
6264
.put(Tuple.tuple("long", "array"), new LongArrayIndexFieldData.Builder())

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

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,100 @@ public String next() {
100100
}
101101
}
102102

103+
public static class ByteBased implements StringValues {
104+
105+
private final ByteValues 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 ByteBased(ByteValues 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 Byte.toString(values.getValue(docId));
131+
}
132+
133+
@Override
134+
public StringArrayRef getValues(int docId) {
135+
ByteArrayRef 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++] = Byte.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 ByteValues.Iter iter;
159+
160+
private ValuesIter reset(ByteValues.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 Byte.toString(iter.next());
173+
}
174+
}
175+
176+
static class Proc implements ByteValues.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, byte value) {
187+
proc.onValue(docId, Byte.toString(value));
188+
}
189+
190+
@Override
191+
public void onMissing(int docId) {
192+
proc.onMissing(docId);
193+
}
194+
}
195+
}
196+
103197
public static class ShortBased implements StringValues {
104198

105199
private final ShortValues values;

0 commit comments

Comments
 (0)