Skip to content

Commit 9ae2971

Browse files
authored
Dense vector field type minor fixes (#62631)
The dense vector field is not aggregatable although it produces fielddata through its BinaryDocValuesField. It should pass up hasDocValues set to true to its parent class in its constructor, and return isAggregatable false. Same for the sparse vector field (only in 7.x). This may not have consequences today, but it will be important once we try to share the same exists query implementation throughout all of the mappers with #57607.
1 parent 593511e commit 9ae2971

File tree

15 files changed

+168
-67
lines changed

15 files changed

+168
-67
lines changed

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/RankFeatureFieldTypeTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
public class RankFeatureFieldTypeTests extends FieldTypeTestCase {
2525

26-
public void testIsAggregatable() {
26+
public void testIsNotAggregatable() {
2727
MappedFieldType fieldType = new RankFeatureFieldMapper.RankFeatureFieldType("field", Collections.emptyMap(), true);
2828
assertFalse(fieldType.isAggregatable());
2929
}

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/RankFeaturesFieldTypeTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
public class RankFeaturesFieldTypeTests extends FieldTypeTestCase {
2525

26-
public void testIsAggregatable() {
26+
public void testIsNotAggregatable() {
2727
MappedFieldType fieldType = new RankFeaturesFieldMapper.RankFeaturesFieldType("field", Collections.emptyMap());
2828
assertFalse(fieldType.isAggregatable());
2929
}

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040

4141
public class ScaledFloatFieldTypeTests extends FieldTypeTestCase {
4242

43-
4443
public void testTermQuery() {
4544
ScaledFloatFieldMapper.ScaledFloatFieldType ft
4645
= new ScaledFloatFieldMapper.ScaledFloatFieldType("scaled_float", 0.1 + randomDouble() * 100);

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/SearchAsYouTypeFieldTypeTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class SearchAsYouTypeFieldTypeTests extends FieldTypeTestCase {
4949
UNSEARCHABLE.freeze();
5050
}
5151

52-
protected SearchAsYouTypeFieldType createFieldType() {
52+
private static SearchAsYouTypeFieldType createFieldType() {
5353
final SearchAsYouTypeFieldType fieldType = new SearchAsYouTypeFieldType(NAME, Defaults.FIELD_TYPE, null,
5454
Lucene.STANDARD_ANALYZER, Lucene.STANDARD_ANALYZER, Collections.emptyMap());
5555
fieldType.setPrefixField(new PrefixFieldType(NAME, TextSearchInfo.SIMPLE_MATCH_ONLY, Defaults.MIN_GRAM, Defaults.MAX_GRAM));

plugins/analysis-icu/src/test/java/org/elasticsearch/index/mapper/CollationFieldTypeTests.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,12 @@ public class CollationFieldTypeTests extends FieldTypeTestCase{
4242

4343
private static final Collator DEFAULT_COLLATOR = Collator.getInstance(ULocale.ROOT).freeze();
4444

45+
private static CollationFieldType createFieldType() {
46+
return new CollationFieldType("field", DEFAULT_COLLATOR);
47+
}
48+
4549
public void testIsFieldWithinQuery() throws IOException {
46-
CollationFieldType ft = new CollationFieldType("field", DEFAULT_COLLATOR);
50+
CollationFieldType ft = createFieldType();
4751
// current impl ignores args and shourd always return INTERSECTS
4852
assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(null,
4953
RandomStrings.randomAsciiOfLengthBetween(random(), 0, 5),
@@ -89,38 +93,37 @@ public void testTermsQuery() {
8993
}
9094

9195
public void testRegexpQuery() {
92-
MappedFieldType ft = new CollationFieldType("field", DEFAULT_COLLATOR);
96+
MappedFieldType ft = createFieldType();
9397
UnsupportedOperationException e = expectThrows(UnsupportedOperationException.class,
9498
() -> ft.regexpQuery("foo.*", 0, 0, 10, null, randomMockShardContext()));
9599
assertEquals("[regexp] queries are not supported on [icu_collation_keyword] fields.", e.getMessage());
96100
}
97101

98102
public void testFuzzyQuery() {
99-
MappedFieldType ft = new CollationFieldType("field", DEFAULT_COLLATOR);
103+
MappedFieldType ft = createFieldType();
100104
UnsupportedOperationException e = expectThrows(UnsupportedOperationException.class,
101105
() -> ft.fuzzyQuery("foo", Fuzziness.fromEdits(2), 1, 50, true, randomMockShardContext()));
102106
assertEquals("[fuzzy] queries are not supported on [icu_collation_keyword] fields.", e.getMessage());
103107
}
104108

105109
public void testPrefixQuery() {
106-
MappedFieldType ft = new CollationFieldType("field", DEFAULT_COLLATOR);
110+
MappedFieldType ft = createFieldType();
107111
UnsupportedOperationException e = expectThrows(UnsupportedOperationException.class,
108112
() -> ft.prefixQuery("prefix", null, randomMockShardContext()));
109113
assertEquals("[prefix] queries are not supported on [icu_collation_keyword] fields.", e.getMessage());
110114
}
111115

112116
public void testWildcardQuery() {
113-
MappedFieldType ft = new CollationFieldType("field", DEFAULT_COLLATOR);
117+
MappedFieldType ft = createFieldType();
114118
UnsupportedOperationException e = expectThrows(UnsupportedOperationException.class,
115119
() -> ft.wildcardQuery("foo*", null, randomMockShardContext()));
116120
assertEquals("[wildcard] queries are not supported on [icu_collation_keyword] fields.", e.getMessage());
117121
}
118122

119123
public void testRangeQuery() {
120-
Collator collator = DEFAULT_COLLATOR;
121-
MappedFieldType ft = new CollationFieldType("field", collator);
122-
RawCollationKey aKey = collator.getRawCollationKey("a", null);
123-
RawCollationKey bKey = collator.getRawCollationKey("b", null);
124+
MappedFieldType ft = createFieldType();
125+
RawCollationKey aKey = DEFAULT_COLLATOR.getRawCollationKey("a", null);
126+
RawCollationKey bKey = DEFAULT_COLLATOR.getRawCollationKey("b", null);
124127

125128
TermRangeQuery expected = new TermRangeQuery("field", new BytesRef(aKey.bytes, 0, aKey.size),
126129
new BytesRef(bKey.bytes, 0, bKey.size), false, false);
@@ -132,7 +135,7 @@ public void testRangeQuery() {
132135
assertEquals("[range] queries on [text] or [keyword] fields cannot be executed when " +
133136
"'search.allow_expensive_queries' is set to false.", ee.getMessage());
134137

135-
MappedFieldType unsearchable = new CollationFieldType("field", false, true, collator, Collections.emptyMap());
138+
MappedFieldType unsearchable = new CollationFieldType("field", false, true, DEFAULT_COLLATOR, Collections.emptyMap());
136139
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
137140
() -> unsearchable.rangeQuery("a", "b", false, false, null, null, null, MOCK_QSC));
138141
assertEquals("Cannot search on field [field] since it is not indexed.", e.getMessage());

server/src/test/java/org/elasticsearch/index/mapper/NumberFieldTypeTests.java

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

2222
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
23-
2423
import org.apache.lucene.document.Document;
2524
import org.apache.lucene.document.DoublePoint;
2625
import org.apache.lucene.document.FloatPoint;

server/src/test/java/org/elasticsearch/index/mapper/RangeFieldTypeTests.java

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454

5555
public class RangeFieldTypeTests extends FieldTypeTestCase {
5656
RangeType type;
57-
protected static String FIELDNAME = "field";
5857
protected static int DISTANCE = 10;
5958
private static long nowInMillis;
6059

@@ -64,16 +63,16 @@ public void setupProperties() {
6463
nowInMillis = randomNonNegativeLong();
6564
}
6665

67-
protected RangeFieldType createDefaultFieldType(String name) {
66+
private RangeFieldType createDefaultFieldType() {
6867
if (type == RangeType.DATE) {
69-
return new RangeFieldType(name, true, true, RangeFieldMapper.Defaults.DATE_FORMATTER, Collections.emptyMap());
68+
return new RangeFieldType("field", true, true, RangeFieldMapper.Defaults.DATE_FORMATTER, Collections.emptyMap());
7069
}
71-
return new RangeFieldType(name, type, true, true, Collections.emptyMap());
70+
return new RangeFieldType("field", type, true, true, Collections.emptyMap());
7271
}
7372

7473
public void testRangeQuery() throws Exception {
7574
QueryShardContext context = createContext();
76-
RangeFieldType ft = createDefaultFieldType(FIELDNAME);
75+
RangeFieldType ft = createDefaultFieldType();
7776

7877
ShapeRelation relation = randomFrom(ShapeRelation.values());
7978
boolean includeLower = randomBoolean();
@@ -95,10 +94,10 @@ public void testRangeQuery() throws Exception {
9594
public void testRangeQueryIntersectsAdjacentValues() throws Exception {
9695
QueryShardContext context = createContext();
9796
ShapeRelation relation = randomFrom(ShapeRelation.values());
98-
RangeFieldType ft = createDefaultFieldType(FIELDNAME);
97+
RangeFieldType ft = createDefaultFieldType();
9998

100-
Object from = null;
101-
Object to = null;
99+
Object from;
100+
Object to;
102101
switch (type) {
103102
case LONG: {
104103
long fromValue = randomLong();
@@ -152,7 +151,7 @@ public void testRangeQueryIntersectsAdjacentValues() throws Exception {
152151
*/
153152
public void testFromLargerToErrors() throws Exception {
154153
QueryShardContext context = createContext();
155-
RangeFieldType ft = createDefaultFieldType(FIELDNAME);
154+
RangeFieldType ft = createDefaultFieldType();
156155

157156
final Object from;
158157
final Object to;
@@ -217,7 +216,7 @@ private QueryShardContext createContext() {
217216
public void testDateRangeQueryUsingMappingFormat() {
218217
QueryShardContext context = createContext();
219218
RangeFieldType strict
220-
= new RangeFieldType(FIELDNAME, true, false, RangeFieldMapper.Defaults.DATE_FORMATTER, Collections.emptyMap());
219+
= new RangeFieldType("field", true, false, RangeFieldMapper.Defaults.DATE_FORMATTER, Collections.emptyMap());
221220
// don't use DISJOINT here because it doesn't work on date fields which we want to compare bounds with
222221
ShapeRelation relation = randomValueOtherThan(ShapeRelation.DISJOINT,() -> randomFrom(ShapeRelation.values()));
223222

@@ -236,13 +235,13 @@ public void testDateRangeQueryUsingMappingFormat() {
236235
assertEquals(1465975790000L, formatter.parseMillis(from));
237236
assertEquals(1466062190000L, formatter.parseMillis(to));
238237

239-
RangeFieldType fieldType = new RangeFieldType(FIELDNAME, true, true, formatter, Collections.emptyMap());
238+
RangeFieldType fieldType = new RangeFieldType("field", true, true, formatter, Collections.emptyMap());
240239
final Query query = fieldType.rangeQuery(from, to, true, true, relation, null, fieldType.dateMathParser(), context);
241240
assertEquals("field:<ranges:[1465975790000 : 1466062190999]>", query.toString());
242241

243242
// compare lower and upper bounds with what we would get on a `date` field
244243
DateFieldType dateFieldType
245-
= new DateFieldType(FIELDNAME, true, true, formatter, DateFieldMapper.Resolution.MILLISECONDS, Collections.emptyMap());
244+
= new DateFieldType("field", true, true, formatter, DateFieldMapper.Resolution.MILLISECONDS, Collections.emptyMap());
246245
final Query queryOnDateField = dateFieldType.rangeQuery(from, to, true, true, relation, null, fieldType.dateMathParser(), context);
247246
assertEquals("field:[1465975790000 TO 1466062190999]", queryOnDateField.toString());
248247
}
@@ -259,7 +258,7 @@ public void testDateVsDateRangeBounds() {
259258
long lower = randomLongBetween(formatter.parseMillis("2000-01-01T00:00"), formatter.parseMillis("2010-01-01T00:00"));
260259
long upper = randomLongBetween(formatter.parseMillis("2011-01-01T00:00"), formatter.parseMillis("2020-01-01T00:00"));
261260

262-
RangeFieldType fieldType = new RangeFieldType(FIELDNAME, true, false, formatter, Collections.emptyMap());
261+
RangeFieldType fieldType = new RangeFieldType("field", true, false, formatter, Collections.emptyMap());
263262
String lowerAsString = formatter.formatMillis(lower);
264263
String upperAsString = formatter.formatMillis(upper);
265264
// also add date math rounding to days occasionally
@@ -286,7 +285,7 @@ public void testDateVsDateRangeBounds() {
286285
}
287286

288287
// check that using this bounds we get similar query when constructing equivalent query on date_range field
289-
Query range = LongRange.newIntersectsQuery(FIELDNAME, new long[] { lowerBoundLong }, new long[] { upperBoundLong });
288+
Query range = LongRange.newIntersectsQuery("field", new long[] { lowerBoundLong }, new long[] { upperBoundLong });
290289
assertEquals(range, query);
291290
}
292291

@@ -313,16 +312,16 @@ private Query getDateRangeQuery(ShapeRelation relation, DateTime from, DateTime
313312
Query indexQuery;
314313
BinaryDocValuesRangeQuery.QueryType queryType;
315314
if (relation == ShapeRelation.WITHIN) {
316-
indexQuery = LongRange.newWithinQuery(FIELDNAME, lower, upper);
315+
indexQuery = LongRange.newWithinQuery("field", lower, upper);
317316
queryType = BinaryDocValuesRangeQuery.QueryType.WITHIN;
318317
} else if (relation == ShapeRelation.CONTAINS) {
319-
indexQuery = LongRange.newContainsQuery(FIELDNAME, lower, upper);
318+
indexQuery = LongRange.newContainsQuery("field", lower, upper);
320319
queryType = BinaryDocValuesRangeQuery.QueryType.CONTAINS;
321320
} else {
322-
indexQuery = LongRange.newIntersectsQuery(FIELDNAME, lower, upper);
321+
indexQuery = LongRange.newIntersectsQuery("field", lower, upper);
323322
queryType = BinaryDocValuesRangeQuery.QueryType.INTERSECTS;
324323
}
325-
Query dvQuery = RangeType.DATE.dvRangeQuery(FIELDNAME, queryType, from.getMillis(),
324+
Query dvQuery = RangeType.DATE.dvRangeQuery("field", queryType, from.getMillis(),
326325
to.getMillis(), includeLower, includeUpper);
327326
return new IndexOrDocValuesQuery(indexQuery, dvQuery);
328327
}
@@ -333,16 +332,16 @@ private Query getIntRangeQuery(ShapeRelation relation, int from, int to, boolean
333332
Query indexQuery;
334333
BinaryDocValuesRangeQuery.QueryType queryType;
335334
if (relation == ShapeRelation.WITHIN) {
336-
indexQuery = IntRange.newWithinQuery(FIELDNAME, lower, upper);
335+
indexQuery = IntRange.newWithinQuery("field", lower, upper);
337336
queryType = BinaryDocValuesRangeQuery.QueryType.WITHIN;
338337
} else if (relation == ShapeRelation.CONTAINS) {
339-
indexQuery = IntRange.newContainsQuery(FIELDNAME, lower, upper);
338+
indexQuery = IntRange.newContainsQuery("field", lower, upper);
340339
queryType = BinaryDocValuesRangeQuery.QueryType.CONTAINS;
341340
} else {
342-
indexQuery = IntRange.newIntersectsQuery(FIELDNAME, lower, upper);
341+
indexQuery = IntRange.newIntersectsQuery("field", lower, upper);
343342
queryType = BinaryDocValuesRangeQuery.QueryType.INTERSECTS;
344343
}
345-
Query dvQuery = RangeType.INTEGER.dvRangeQuery(FIELDNAME, queryType, from, to,
344+
Query dvQuery = RangeType.INTEGER.dvRangeQuery("field", queryType, from, to,
346345
includeLower, includeUpper);
347346
return new IndexOrDocValuesQuery(indexQuery, dvQuery);
348347
}
@@ -353,16 +352,16 @@ private Query getLongRangeQuery(ShapeRelation relation, long from, long to, bool
353352
Query indexQuery;
354353
BinaryDocValuesRangeQuery.QueryType queryType;
355354
if (relation == ShapeRelation.WITHIN) {
356-
indexQuery = LongRange.newWithinQuery(FIELDNAME, lower, upper);
355+
indexQuery = LongRange.newWithinQuery("field", lower, upper);
357356
queryType = BinaryDocValuesRangeQuery.QueryType.WITHIN;
358357
} else if (relation == ShapeRelation.CONTAINS) {
359-
indexQuery = LongRange.newContainsQuery(FIELDNAME, lower, upper);
358+
indexQuery = LongRange.newContainsQuery("field", lower, upper);
360359
queryType = BinaryDocValuesRangeQuery.QueryType.CONTAINS;
361360
} else {
362-
indexQuery = LongRange.newIntersectsQuery(FIELDNAME, lower, upper);
361+
indexQuery = LongRange.newIntersectsQuery("field", lower, upper);
363362
queryType = BinaryDocValuesRangeQuery.QueryType.INTERSECTS;
364363
}
365-
Query dvQuery = RangeType.LONG.dvRangeQuery(FIELDNAME, queryType, from, to,
364+
Query dvQuery = RangeType.LONG.dvRangeQuery("field", queryType, from, to,
366365
includeLower, includeUpper);
367366
return new IndexOrDocValuesQuery(indexQuery, dvQuery);
368367
}
@@ -373,16 +372,16 @@ private Query getFloatRangeQuery(ShapeRelation relation, float from, float to, b
373372
Query indexQuery;
374373
BinaryDocValuesRangeQuery.QueryType queryType;
375374
if (relation == ShapeRelation.WITHIN) {
376-
indexQuery = FloatRange.newWithinQuery(FIELDNAME, lower, upper);
375+
indexQuery = FloatRange.newWithinQuery("field", lower, upper);
377376
queryType = BinaryDocValuesRangeQuery.QueryType.WITHIN;
378377
} else if (relation == ShapeRelation.CONTAINS) {
379-
indexQuery = FloatRange.newContainsQuery(FIELDNAME, lower, upper);
378+
indexQuery = FloatRange.newContainsQuery("field", lower, upper);
380379
queryType = BinaryDocValuesRangeQuery.QueryType.CONTAINS;
381380
} else {
382-
indexQuery = FloatRange.newIntersectsQuery(FIELDNAME, lower, upper);
381+
indexQuery = FloatRange.newIntersectsQuery("field", lower, upper);
383382
queryType = BinaryDocValuesRangeQuery.QueryType.INTERSECTS;
384383
}
385-
Query dvQuery = RangeType.FLOAT.dvRangeQuery(FIELDNAME, queryType, from, to,
384+
Query dvQuery = RangeType.FLOAT.dvRangeQuery("field", queryType, from, to,
386385
includeLower, includeUpper);
387386
return new IndexOrDocValuesQuery(indexQuery, dvQuery);
388387
}
@@ -394,16 +393,16 @@ private Query getDoubleRangeQuery(ShapeRelation relation, double from, double to
394393
Query indexQuery;
395394
BinaryDocValuesRangeQuery.QueryType queryType;
396395
if (relation == ShapeRelation.WITHIN) {
397-
indexQuery = DoubleRange.newWithinQuery(FIELDNAME, lower, upper);
396+
indexQuery = DoubleRange.newWithinQuery("field", lower, upper);
398397
queryType = BinaryDocValuesRangeQuery.QueryType.WITHIN;
399398
} else if (relation == ShapeRelation.CONTAINS) {
400-
indexQuery = DoubleRange.newContainsQuery(FIELDNAME, lower, upper);
399+
indexQuery = DoubleRange.newContainsQuery("field", lower, upper);
401400
queryType = BinaryDocValuesRangeQuery.QueryType.CONTAINS;
402401
} else {
403-
indexQuery = DoubleRange.newIntersectsQuery(FIELDNAME, lower, upper);
402+
indexQuery = DoubleRange.newIntersectsQuery("field", lower, upper);
404403
queryType = BinaryDocValuesRangeQuery.QueryType.INTERSECTS;
405404
}
406-
Query dvQuery = RangeType.DOUBLE.dvRangeQuery(FIELDNAME, queryType, from, to,
405+
Query dvQuery = RangeType.DOUBLE.dvRangeQuery("field", queryType, from, to,
407406
includeLower, includeUpper);
408407
return new IndexOrDocValuesQuery(indexQuery, dvQuery);
409408
}
@@ -415,16 +414,16 @@ private Query getInetAddressRangeQuery(ShapeRelation relation, InetAddress from,
415414
Query indexQuery;
416415
BinaryDocValuesRangeQuery.QueryType queryType;
417416
if (relation == ShapeRelation.WITHIN) {
418-
indexQuery = InetAddressRange.newWithinQuery(FIELDNAME, lower, upper);
417+
indexQuery = InetAddressRange.newWithinQuery("field", lower, upper);
419418
queryType = BinaryDocValuesRangeQuery.QueryType.WITHIN;
420419
} else if (relation == ShapeRelation.CONTAINS) {
421-
indexQuery = InetAddressRange.newContainsQuery(FIELDNAME, lower, upper);
420+
indexQuery = InetAddressRange.newContainsQuery("field", lower, upper);
422421
queryType = BinaryDocValuesRangeQuery.QueryType.CONTAINS;
423422
} else {
424-
indexQuery = InetAddressRange.newIntersectsQuery(FIELDNAME, lower, upper);
423+
indexQuery = InetAddressRange.newIntersectsQuery("field", lower, upper);
425424
queryType = BinaryDocValuesRangeQuery.QueryType.INTERSECTS;
426425
}
427-
Query dvQuery = RangeType.IP.dvRangeQuery(FIELDNAME, queryType, from, to,
426+
Query dvQuery = RangeType.IP.dvRangeQuery("field", queryType, from, to,
428427
includeLower, includeUpper);
429428
return new IndexOrDocValuesQuery(indexQuery, dvQuery);
430429
}
@@ -472,7 +471,7 @@ public void testParseIp() {
472471
public void testTermQuery() throws Exception {
473472
// See https://github.com/elastic/elasticsearch/issues/25950
474473
QueryShardContext context = createContext();
475-
RangeFieldType ft = createDefaultFieldType(FIELDNAME);
474+
RangeFieldType ft = createDefaultFieldType();
476475

477476
Object value = nextFrom();
478477
ShapeRelation relation = ShapeRelation.INTERSECTS;

0 commit comments

Comments
 (0)