Skip to content

Commit 64ba8a9

Browse files
authored
Put values source types on fields (#51503)
1 parent 1276d73 commit 64ba8a9

File tree

27 files changed

+270
-81
lines changed

27 files changed

+270
-81
lines changed

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
import org.elasticsearch.indices.breaker.CircuitBreakerService;
6060
import org.elasticsearch.search.DocValueFormat;
6161
import org.elasticsearch.search.MultiValueMode;
62+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
63+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
6264

6365
import java.io.IOException;
6466
import java.math.BigDecimal;
@@ -292,6 +294,11 @@ public IndexFieldData<?> build(IndexSettings indexSettings, MappedFieldType fiel
292294
};
293295
}
294296

297+
@Override
298+
public ValuesSourceType getValuesSourceType() {
299+
return CoreValuesSourceType.NUMERIC;
300+
}
301+
295302
@Override
296303
public Object valueForDisplay(Object value) {
297304
if (value == null) {

modules/parent-join/src/main/java/org/elasticsearch/join/mapper/MetaJoinFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.elasticsearch.index.mapper.ParseContext;
3232
import org.elasticsearch.index.mapper.StringFieldType;
3333
import org.elasticsearch.index.query.QueryShardContext;
34+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
35+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
3436

3537
import java.io.IOException;
3638
import java.util.List;
@@ -95,6 +97,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
9597
return new DocValuesIndexFieldData.Builder();
9698
}
9799

100+
@Override
101+
public ValuesSourceType getValuesSourceType() {
102+
return CoreValuesSourceType.BYTES;
103+
}
104+
98105
@Override
99106
public Object valueForDisplay(Object value) {
100107
if (value == null) {

modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentIdFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import org.elasticsearch.index.mapper.ParseContext;
4242
import org.elasticsearch.index.mapper.StringFieldType;
4343
import org.elasticsearch.index.query.QueryShardContext;
44+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
45+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4446

4547
import java.io.IOException;
4648
import java.util.Collection;
@@ -118,6 +120,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
118120
return new DocValuesIndexFieldData.Builder();
119121
}
120122

123+
@Override
124+
public ValuesSourceType getValuesSourceType() {
125+
return CoreValuesSourceType.BYTES;
126+
}
127+
121128
@Override
122129
public Object valueForDisplay(Object value) {
123130
if (value == null) {

modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import org.elasticsearch.index.mapper.ParseContext;
4444
import org.elasticsearch.index.mapper.StringFieldType;
4545
import org.elasticsearch.index.query.QueryShardContext;
46+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
47+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4648

4749
import java.io.IOException;
4850
import java.util.ArrayList;
@@ -227,6 +229,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
227229
return new DocValuesIndexFieldData.Builder();
228230
}
229231

232+
@Override
233+
public ValuesSourceType getValuesSourceType() {
234+
return CoreValuesSourceType.BYTES;
235+
}
236+
230237
@Override
231238
public Object valueForDisplay(Object value) {
232239
if (value == null) {

plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4747
import org.elasticsearch.index.query.QueryShardContext;
4848
import org.elasticsearch.search.DocValueFormat;
49+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
50+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4951

5052
import java.io.IOException;
5153
import java.time.ZoneId;
@@ -139,6 +141,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
139141
return new DocValuesIndexFieldData.Builder();
140142
}
141143

144+
@Override
145+
public ValuesSourceType getValuesSourceType() {
146+
return CoreValuesSourceType.BYTES;
147+
}
148+
142149
@Override
143150
protected BytesRef indexedValueForSearch(Object value) {
144151
if (value == null) {

plugins/mapper-murmur3/src/main/java/org/elasticsearch/index/mapper/murmur3/Murmur3FieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import org.elasticsearch.index.mapper.TypeParsers;
4040
import org.elasticsearch.index.query.QueryShardContext;
4141
import org.elasticsearch.index.query.QueryShardException;
42+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
43+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4244

4345
import java.io.IOException;
4446
import java.util.List;
@@ -124,6 +126,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
124126
return new DocValuesIndexFieldData.Builder().numericType(NumericType.LONG);
125127
}
126128

129+
@Override
130+
public ValuesSourceType getValuesSourceType() {
131+
return CoreValuesSourceType.NUMERIC;
132+
}
133+
127134
@Override
128135
public Query existsQuery(QueryShardContext context) {
129136
return new DocValuesFieldExistsQuery(name());

server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import org.elasticsearch.index.query.QueryShardContext;
4141
import org.elasticsearch.index.query.QueryShardException;
4242
import org.elasticsearch.search.DocValueFormat;
43+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
44+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4345

4446
import java.io.IOException;
4547
import java.time.ZoneId;
@@ -136,6 +138,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
136138
return new BytesBinaryDVIndexFieldData.Builder();
137139
}
138140

141+
@Override
142+
public ValuesSourceType getValuesSourceType() {
143+
return CoreValuesSourceType.BYTES;
144+
}
145+
139146
@Override
140147
public Query existsQuery(QueryShardContext context) {
141148
if (hasDocValues()) {

server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4141
import org.elasticsearch.index.query.QueryShardContext;
4242
import org.elasticsearch.search.DocValueFormat;
43+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
44+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4345

4446
import java.io.IOException;
4547
import java.time.ZoneId;
@@ -189,6 +191,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
189191
return new DocValuesIndexFieldData.Builder().numericType(NumericType.BOOLEAN);
190192
}
191193

194+
@Override
195+
public ValuesSourceType getValuesSourceType() {
196+
return CoreValuesSourceType.BOOLEAN;
197+
}
198+
192199
@Override
193200
public DocValueFormat docValueFormat(@Nullable String format, ZoneId timeZone) {
194201
if (format != null) {

server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import org.elasticsearch.index.query.QueryRewriteContext;
5353
import org.elasticsearch.index.query.QueryShardContext;
5454
import org.elasticsearch.search.DocValueFormat;
55+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
56+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
5557

5658
import java.io.IOException;
5759
import java.time.DateTimeException;
@@ -465,6 +467,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
465467
return new DocValuesIndexFieldData.Builder().numericType(resolution.numericType());
466468
}
467469

470+
@Override
471+
public ValuesSourceType getValuesSourceType() {
472+
return CoreValuesSourceType.DATE;
473+
}
474+
468475
@Override
469476
public Object valueForDisplay(Object value) {
470477
Long val = (Long) value;

server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import org.elasticsearch.index.fielddata.plain.AbstractLatLonPointDVIndexFieldData;
4141
import org.elasticsearch.index.query.QueryShardContext;
4242
import org.elasticsearch.index.query.QueryShardException;
43+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
44+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4345

4446
import java.io.IOException;
4547
import java.util.ArrayList;
@@ -235,6 +237,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
235237
return new AbstractLatLonPointDVIndexFieldData.Builder();
236238
}
237239

240+
@Override
241+
public ValuesSourceType getValuesSourceType() {
242+
return CoreValuesSourceType.GEOPOINT;
243+
}
244+
238245
@Override
239246
public Query existsQuery(QueryShardContext context) {
240247
if (hasDocValues()) {

server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
import org.elasticsearch.indices.IndicesService;
4747
import org.elasticsearch.indices.breaker.CircuitBreakerService;
4848
import org.elasticsearch.search.MultiValueMode;
49+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
50+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4951

5052
import java.io.IOException;
5153
import java.util.Arrays;
@@ -153,6 +155,12 @@ public Query termsQuery(List<?> values, QueryShardContext context) {
153155
return new TermInSetQuery(name(), bytesRefs);
154156
}
155157

158+
@Override
159+
public ValuesSourceType getValuesSourceType() {
160+
// TODO: should this even exist? Is aggregating on the ID field valid?
161+
return CoreValuesSourceType.BYTES;
162+
}
163+
156164
@Override
157165
public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
158166
if (indexOptions() == IndexOptions.NONE) {

server/src/main/java/org/elasticsearch/index/mapper/IndexFieldMapper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.elasticsearch.index.fielddata.IndexFieldData;
3434
import org.elasticsearch.index.fielddata.plain.ConstantIndexFieldData;
3535
import org.elasticsearch.index.query.QueryShardContext;
36+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
37+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
3638

3739
import java.io.IOException;
3840
import java.util.List;
@@ -189,6 +191,12 @@ public Query wildcardQuery(String value,
189191
public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
190192
return new ConstantIndexFieldData.Builder(mapperService -> fullyQualifiedIndexName);
191193
}
194+
195+
@Override
196+
public ValuesSourceType getValuesSourceType() {
197+
// TODO: Should Index fields be aggregatable? What even is an IndexField?
198+
return CoreValuesSourceType.BYTES;
199+
}
192200
}
193201

194202
private IndexFieldMapper(Settings indexSettings, MappedFieldType existing) {

server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4545
import org.elasticsearch.index.query.QueryShardContext;
4646
import org.elasticsearch.search.DocValueFormat;
47+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
48+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4749

4850
import java.io.IOException;
4951
import java.net.InetAddress;
@@ -294,6 +296,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
294296
return new DocValuesIndexFieldData.Builder().scriptFunction(IpScriptDocValues::new);
295297
}
296298

299+
@Override
300+
public ValuesSourceType getValuesSourceType() {
301+
return CoreValuesSourceType.IP;
302+
}
303+
297304
@Override
298305
public Object valueForDisplay(Object value) {
299306
if (value == null) {

server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import org.elasticsearch.index.fielddata.IndexFieldData;
4444
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4545
import org.elasticsearch.index.query.QueryShardContext;
46+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
47+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4648

4749
import java.io.IOException;
4850
import java.util.Iterator;
@@ -271,6 +273,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
271273
return new DocValuesIndexFieldData.Builder();
272274
}
273275

276+
@Override
277+
public ValuesSourceType getValuesSourceType() {
278+
return CoreValuesSourceType.BYTES;
279+
}
280+
274281
@Override
275282
public Object valueForDisplay(Object value) {
276283
if (value == null) {

server/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.elasticsearch.index.query.QueryShardException;
5151
import org.elasticsearch.index.similarity.SimilarityProvider;
5252
import org.elasticsearch.search.DocValueFormat;
53+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
5354

5455
import java.io.IOException;
5556
import java.time.ZoneId;
@@ -117,6 +118,16 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
117118
throw new IllegalArgumentException("Fielddata is not supported on field [" + name() + "] of type [" + typeName() + "]");
118119
}
119120

121+
/**
122+
* Returns the {@link ValuesSourceType} which supports this field type. This is tightly coupled to field data and aggregations support,
123+
* so any implementation that returns a value from {@link MappedFieldType#fielddataBuilder} should also return a value from here.
124+
*
125+
* @return The appropriate {@link ValuesSourceType} for this field type.
126+
*/
127+
public ValuesSourceType getValuesSourceType() {
128+
throw new IllegalArgumentException("Aggregations are not supported on field [" + name() + "] of type [" + typeName() + "]");
129+
}
130+
120131
@Override
121132
public boolean equals(Object o) {
122133
if (!super.equals(o)) return false;

server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
5656
import org.elasticsearch.index.query.QueryShardContext;
5757
import org.elasticsearch.search.DocValueFormat;
58+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
59+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
5860

5961
import java.io.IOException;
6062
import java.time.ZoneId;
@@ -958,6 +960,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
958960
return new DocValuesIndexFieldData.Builder().numericType(type.numericType());
959961
}
960962

963+
@Override
964+
public ValuesSourceType getValuesSourceType() {
965+
return CoreValuesSourceType.NUMERIC;
966+
}
967+
961968
@Override
962969
public Object valueForDisplay(Object value) {
963970
if (value == null) {

server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4646
import org.elasticsearch.index.query.QueryShardContext;
4747
import org.elasticsearch.search.DocValueFormat;
48+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
49+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4850

4951
import java.io.IOException;
5052
import java.net.InetAddress;
@@ -242,6 +244,11 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
242244
return new DocValuesIndexFieldData.Builder().setRangeType(rangeType);
243245
}
244246

247+
@Override
248+
public ValuesSourceType getValuesSourceType() {
249+
return CoreValuesSourceType.RANGE;
250+
}
251+
245252
@Override
246253
public String typeName() {
247254
return rangeType.name;

server/src/main/java/org/elasticsearch/index/mapper/SeqNoFieldMapper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.elasticsearch.index.mapper.ParseContext.Document;
3838
import org.elasticsearch.index.query.QueryShardContext;
3939
import org.elasticsearch.index.seqno.SequenceNumbers;
40+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
41+
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
4042

4143
import java.io.IOException;
4244
import java.util.List;
@@ -218,6 +220,10 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
218220
return new DocValuesIndexFieldData.Builder().numericType(NumericType.LONG);
219221
}
220222

223+
@Override
224+
public ValuesSourceType getValuesSourceType() {
225+
return CoreValuesSourceType.NUMERIC;
226+
}
221227
}
222228

223229
public SeqNoFieldMapper(Settings indexSettings) {

0 commit comments

Comments
 (0)