Skip to content

Commit fc09ce7

Browse files
ubonesskimchy
authored andcommitted
Implemented int field data
1 parent d82859c commit fc09ce7

File tree

9 files changed

+1590
-4
lines changed

9 files changed

+1590
-4
lines changed

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

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.elasticsearch.ElasticSearchIllegalStateException;
2323
import org.elasticsearch.index.fielddata.util.ByteArrayRef;
24+
import org.elasticsearch.index.fielddata.util.IntArrayRef;
2425
import org.elasticsearch.index.fielddata.util.LongArrayRef;
2526

2627
/**
@@ -99,6 +100,103 @@ public byte next() {
99100
}
100101
}
101102

103+
public static class IntBased implements ByteValues {
104+
105+
private final IntValues values;
106+
107+
private final ByteArrayRef arrayScratch = new ByteArrayRef(new byte[1], 1);
108+
private final ValueIter iter = new ValueIter();
109+
private final Proc proc = new Proc();
110+
111+
public IntBased(IntValues 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 byte getValue(int docId) {
127+
return (byte) values.getValue(docId);
128+
}
129+
130+
@Override
131+
public byte getValueMissing(int docId, byte missingValue) {
132+
return (byte) values.getValueMissing(docId, missingValue);
133+
}
134+
135+
@Override
136+
public ByteArrayRef getValues(int docId) {
137+
IntArrayRef arrayRef = values.getValues(docId);
138+
int size = arrayRef.size();
139+
if (size == 0) {
140+
return ByteArrayRef.EMPTY;
141+
}
142+
arrayScratch.reset(size);
143+
for (int i = arrayRef.start; i < arrayRef.end; i++) {
144+
arrayScratch.values[arrayScratch.end++] = (byte) arrayRef.values[i];
145+
}
146+
return arrayScratch;
147+
}
148+
149+
@Override
150+
public Iter getIter(int docId) {
151+
return iter.reset(values.getIter(docId));
152+
}
153+
154+
@Override
155+
public void forEachValueInDoc(int docId, ValueInDocProc proc) {
156+
values.forEachValueInDoc(docId, this.proc.reset(proc));
157+
}
158+
159+
static class ValueIter implements Iter {
160+
161+
private IntValues.Iter iter;
162+
163+
public ValueIter reset(IntValues.Iter iter) {
164+
this.iter = iter;
165+
return this;
166+
}
167+
168+
@Override
169+
public boolean hasNext() {
170+
return iter.hasNext();
171+
}
172+
173+
@Override
174+
public byte next() {
175+
return (byte) iter.next();
176+
}
177+
}
178+
179+
static class Proc implements IntValues.ValueInDocProc {
180+
181+
private ValueInDocProc proc;
182+
183+
public Proc reset(ValueInDocProc proc) {
184+
this.proc = proc;
185+
return this;
186+
}
187+
188+
@Override
189+
public void onValue(int docId, int value) {
190+
proc.onValue(docId, (byte) value);
191+
}
192+
193+
@Override
194+
public void onMissing(int docId) {
195+
proc.onMissing(docId);
196+
}
197+
}
198+
}
199+
102200
public static class LongBased implements ByteValues {
103201

104202
private final LongValues values;

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

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import org.elasticsearch.ElasticSearchIllegalStateException;
2323
import org.elasticsearch.index.fielddata.util.DoubleArrayRef;
24+
import org.elasticsearch.index.fielddata.util.IntArrayRef;
25+
import org.elasticsearch.index.fielddata.util.LongArrayRef;
2426

2527
/**
2628
*/
@@ -97,4 +99,104 @@ public double next() {
9799
}
98100
}
99101
}
102+
103+
public static class LongBased implements DoubleValues {
104+
105+
private final LongValues values;
106+
private final DoubleArrayRef arrayScratch = new DoubleArrayRef(new double[1], 1);
107+
private final ValueIter iter = new ValueIter();
108+
private final Proc proc = new Proc();
109+
110+
public LongBased(LongValues values) {
111+
this.values = values;
112+
}
113+
114+
@Override
115+
public boolean isMultiValued() {
116+
return values.isMultiValued();
117+
}
118+
119+
@Override
120+
public boolean hasValue(int docId) {
121+
return values.hasValue(docId);
122+
}
123+
124+
@Override
125+
public double getValue(int docId) {
126+
return (double) values.getValue(docId);
127+
}
128+
129+
@Override
130+
public double getValueMissing(int docId, double missingValue) {
131+
if (!values.hasValue(docId)) {
132+
return missingValue;
133+
}
134+
return getValue(docId);
135+
}
136+
137+
@Override
138+
public DoubleArrayRef getValues(int docId) {
139+
LongArrayRef arrayRef = values.getValues(docId);
140+
int size = arrayRef.size();
141+
if (size == 0) {
142+
return DoubleArrayRef.EMPTY;
143+
}
144+
arrayScratch.reset(size);
145+
for (int i = arrayRef.start; i < arrayRef.end; i++) {
146+
arrayScratch.values[arrayScratch.end++] = (double) arrayRef.values[i];
147+
}
148+
return arrayScratch;
149+
}
150+
151+
@Override
152+
public Iter getIter(int docId) {
153+
return this.iter.reset(values.getIter(docId));
154+
}
155+
156+
@Override
157+
public void forEachValueInDoc(int docId, ValueInDocProc proc) {
158+
values.forEachValueInDoc(docId, this.proc.reset(proc));
159+
}
160+
161+
static class ValueIter implements Iter {
162+
163+
private LongValues.Iter iter;
164+
165+
private ValueIter reset(LongValues.Iter iter) {
166+
this.iter = iter;
167+
return this;
168+
}
169+
170+
@Override
171+
public boolean hasNext() {
172+
return iter.hasNext();
173+
}
174+
175+
@Override
176+
public double next() {
177+
return (double) iter.next();
178+
}
179+
}
180+
181+
static class Proc implements LongValues.ValueInDocProc {
182+
183+
private ValueInDocProc proc;
184+
185+
private Proc reset(ValueInDocProc proc) {
186+
this.proc = proc;
187+
return this;
188+
}
189+
190+
@Override
191+
public void onValue(int docId, long value) {
192+
this.proc.onValue(docId, (double) value);
193+
}
194+
195+
@Override
196+
public void onMissing(int docId) {
197+
this.proc.onMissing(docId);
198+
}
199+
}
200+
201+
}
100202
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@
2929
import org.elasticsearch.common.util.concurrent.ConcurrentCollections;
3030
import org.elasticsearch.index.AbstractIndexComponent;
3131
import org.elasticsearch.index.Index;
32-
import org.elasticsearch.index.fielddata.plain.ConcreteBytesRefIndexFieldData;
33-
import org.elasticsearch.index.fielddata.plain.DoubleArrayIndexFieldData;
34-
import org.elasticsearch.index.fielddata.plain.GeoPointDoubleArrayIndexFieldData;
35-
import org.elasticsearch.index.fielddata.plain.LongArrayIndexFieldData;
32+
import org.elasticsearch.index.fielddata.plain.*;
3633
import org.elasticsearch.index.mapper.FieldMapper;
3734
import org.elasticsearch.index.settings.IndexSettings;
3835

@@ -51,13 +48,15 @@ public class IndexFieldDataService extends AbstractIndexComponent {
5148
.put("double", new DoubleArrayIndexFieldData.Builder())
5249
.put("long", new LongArrayIndexFieldData.Builder())
5350
.put("geo_point", new GeoPointDoubleArrayIndexFieldData.Builder())
51+
.put("int", new IntArrayIndexFieldData.Builder())
5452
.immutableMap();
5553

5654
buildersByTypeAndFormat = MapBuilder.<Tuple<String, String>, IndexFieldData.Builder>newMapBuilder()
5755
.put(Tuple.tuple("string", "concrete_bytes"), new ConcreteBytesRefIndexFieldData.Builder())
5856
.put(Tuple.tuple("double", "array"), new DoubleArrayIndexFieldData.Builder())
5957
.put(Tuple.tuple("long", "array"), new LongArrayIndexFieldData.Builder())
6058
.put(Tuple.tuple("geo_point", "array"), new GeoPointDoubleArrayIndexFieldData.Builder())
59+
.put(Tuple.tuple("int", "array"), new IntArrayIndexFieldData.Builder())
6160
.immutableMap();
6261
}
6362

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

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

2222
import org.elasticsearch.ElasticSearchIllegalStateException;
23+
import org.elasticsearch.index.fielddata.util.IntArrayRef;
2324
import org.elasticsearch.index.fielddata.util.LongArrayRef;
2425

2526
/**
@@ -47,6 +48,7 @@ public interface LongValues {
4748
void forEachValueInDoc(int docId, ValueInDocProc proc);
4849

4950
static interface ValueInDocProc {
51+
5052
void onValue(int docId, long value);
5153

5254
void onMissing(int docId);
@@ -97,4 +99,5 @@ public long next() {
9799
}
98100
}
99101
}
102+
100103
}

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

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

2222
import org.elasticsearch.ElasticSearchIllegalStateException;
23+
import org.elasticsearch.index.fielddata.util.IntArrayRef;
2324
import org.elasticsearch.index.fielddata.util.LongArrayRef;
2425
import org.elasticsearch.index.fielddata.util.ShortArrayRef;
2526

@@ -99,6 +100,103 @@ public short next() {
99100
}
100101
}
101102

103+
public static class IntBased implements ShortValues {
104+
105+
private final IntValues values;
106+
107+
private final ShortArrayRef arrayScratch = new ShortArrayRef(new short[1], 1);
108+
private final ValueIter iter = new ValueIter();
109+
private final Proc proc = new Proc();
110+
111+
public IntBased(IntValues 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 short getValue(int docId) {
127+
return (short) values.getValue(docId);
128+
}
129+
130+
@Override
131+
public short getValueMissing(int docId, short missingValue) {
132+
return (short) values.getValueMissing(docId, missingValue);
133+
}
134+
135+
@Override
136+
public ShortArrayRef getValues(int docId) {
137+
IntArrayRef arrayRef = values.getValues(docId);
138+
int size = arrayRef.size();
139+
if (size == 0) {
140+
return ShortArrayRef.EMPTY;
141+
}
142+
arrayScratch.reset(size);
143+
for (int i = arrayRef.start; i < arrayRef.end; i++) {
144+
arrayScratch.values[arrayScratch.end++] = (short) arrayRef.values[i];
145+
}
146+
return arrayScratch;
147+
}
148+
149+
@Override
150+
public Iter getIter(int docId) {
151+
return iter.reset(values.getIter(docId));
152+
}
153+
154+
@Override
155+
public void forEachValueInDoc(int docId, ValueInDocProc proc) {
156+
values.forEachValueInDoc(docId, this.proc.reset(proc));
157+
}
158+
159+
static class ValueIter implements Iter {
160+
161+
private IntValues.Iter iter;
162+
163+
public ValueIter reset(IntValues.Iter iter) {
164+
this.iter = iter;
165+
return this;
166+
}
167+
168+
@Override
169+
public boolean hasNext() {
170+
return iter.hasNext();
171+
}
172+
173+
@Override
174+
public short next() {
175+
return (short) iter.next();
176+
}
177+
}
178+
179+
static class Proc implements IntValues.ValueInDocProc {
180+
181+
private ValueInDocProc proc;
182+
183+
public Proc reset(ValueInDocProc proc) {
184+
this.proc = proc;
185+
return this;
186+
}
187+
188+
@Override
189+
public void onValue(int docId, int value) {
190+
proc.onValue(docId, (short) value);
191+
}
192+
193+
@Override
194+
public void onMissing(int docId) {
195+
proc.onMissing(docId);
196+
}
197+
}
198+
}
199+
102200
public static class LongBased implements ShortValues {
103201

104202
private final LongValues values;

0 commit comments

Comments
 (0)