Skip to content

Commit a6e47ae

Browse files
authored
Refactor FieldCapabilities creation by adding a proper builder object (#121310)
Reduce boilerplate associated with creating `FieldCapabilities` instances. Since it's a class with a huge number of fields, it makes sense to define a builder object, as that can also help with all the Boolean and null blindness going on. Note while there is a static Builder class in `FieldCapabilities`, it is not a proper builder object (no setters, still need to pass a lot of otherwise default parameters) and also package-private. To avoid changing that, I defined a new `FieldCapabilitiesBuilder` class. I also went over the code and refactored places which used the old constructor.
1 parent b1c75d1 commit a6e47ae

File tree

15 files changed

+213
-242
lines changed

15 files changed

+213
-242
lines changed

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

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package org.elasticsearch.index.mapper.extras;
1111

1212
import org.elasticsearch.action.fieldcaps.FieldCapabilities;
13+
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesBuilder;
1314
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse;
1415
import org.elasticsearch.action.support.ActiveShardCount;
1516
import org.elasticsearch.plugins.Plugin;
@@ -19,7 +20,6 @@
1920

2021
import java.util.ArrayList;
2122
import java.util.Collection;
22-
import java.util.Collections;
2323
import java.util.Map;
2424

2525
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
@@ -59,10 +59,7 @@ public void testRankFeatureInIndex() {
5959
Map<String, FieldCapabilities> fooRankField = response.getField("fooRank");
6060
assertEquals(1, fooRankField.size());
6161
assertThat(fooRankField, Matchers.hasKey("rank_feature"));
62-
assertEquals(
63-
new FieldCapabilities("fooRank", "rank_feature", false, true, false, null, null, null, Collections.emptyMap()),
64-
fooRankField.get("rank_feature")
65-
);
62+
assertEquals(fieldCapabilities("fooRank"), fooRankField.get("rank_feature"));
6663
}
6764

6865
public void testRankFeatureInIndexAfterRestart() throws Exception {
@@ -79,10 +76,7 @@ public void testRankFeatureInIndexAfterRestart() throws Exception {
7976
Map<String, FieldCapabilities> fooRankField = response.getField("fooRank");
8077
assertEquals(1, fooRankField.size());
8178
assertThat(fooRankField, Matchers.hasKey("rank_feature"));
82-
assertEquals(
83-
new FieldCapabilities("fooRank", "rank_feature", false, true, false, null, null, null, Collections.emptyMap()),
84-
fooRankField.get("rank_feature")
85-
);
79+
assertEquals(fieldCapabilities("fooRank"), fooRankField.get("rank_feature"));
8680
}
8781

8882
public void testAllRankFeatureReturnedIfOneIsPresent() {
@@ -98,18 +92,16 @@ public void testAllRankFeatureReturnedIfOneIsPresent() {
9892
Map<String, FieldCapabilities> fooRankField = response.getField("fooRank");
9993
assertEquals(1, fooRankField.size());
10094
assertThat(fooRankField, Matchers.hasKey("rank_feature"));
101-
assertEquals(
102-
new FieldCapabilities("fooRank", "rank_feature", false, true, false, null, null, null, Collections.emptyMap()),
103-
fooRankField.get("rank_feature")
104-
);
95+
assertEquals(fieldCapabilities("fooRank"), fooRankField.get("rank_feature"));
10596
assertThat(response.get(), Matchers.hasKey("barRank"));
10697
// Check the capabilities for the 'barRank' field.
10798
Map<String, FieldCapabilities> barRankField = response.getField("barRank");
10899
assertEquals(1, barRankField.size());
109100
assertThat(barRankField, Matchers.hasKey("rank_feature"));
110-
assertEquals(
111-
new FieldCapabilities("barRank", "rank_feature", false, true, false, null, null, null, Collections.emptyMap()),
112-
barRankField.get("rank_feature")
113-
);
101+
assertEquals(fieldCapabilities("barRank"), barRankField.get("rank_feature"));
102+
}
103+
104+
private static FieldCapabilities fieldCapabilities(String fieldName) {
105+
return new FieldCapabilitiesBuilder(fieldName, "rank_feature").isAggregatable(false).build();
114106
}
115107
}

server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java

Lines changed: 9 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.elasticsearch.action.admin.indices.close.CloseIndexRequest;
1818
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
1919
import org.elasticsearch.action.fieldcaps.FieldCapabilities;
20+
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesBuilder;
2021
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesFailure;
2122
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesRequest;
2223
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse;
@@ -219,24 +220,11 @@ public void testFieldAlias() {
219220
assertEquals(2, distance.size());
220221

221222
assertTrue(distance.containsKey("double"));
222-
assertEquals(
223-
new FieldCapabilities(
224-
"distance",
225-
"double",
226-
false,
227-
true,
228-
true,
229-
new String[] { "old_index" },
230-
null,
231-
null,
232-
Collections.emptyMap()
233-
),
234-
distance.get("double")
235-
);
223+
assertEquals(new FieldCapabilitiesBuilder("distance", "double").indices("old_index").build(), distance.get("double"));
236224

237225
assertTrue(distance.containsKey("text"));
238226
assertEquals(
239-
new FieldCapabilities("distance", "text", false, true, false, new String[] { "new_index" }, null, null, Collections.emptyMap()),
227+
new FieldCapabilitiesBuilder("distance", "text").isAggregatable(false).indices("new_index").build(),
240228
distance.get("text")
241229
);
242230

@@ -245,10 +233,7 @@ public void testFieldAlias() {
245233
assertEquals(1, routeLength.size());
246234

247235
assertTrue(routeLength.containsKey("double"));
248-
assertEquals(
249-
new FieldCapabilities("route_length_miles", "double", false, true, true, null, null, null, Collections.emptyMap()),
250-
routeLength.get("double")
251-
);
236+
assertEquals(new FieldCapabilitiesBuilder("route_length_miles", "double").build(), routeLength.get("double"));
252237
}
253238

254239
public void testFieldAliasWithWildcard() {
@@ -284,35 +269,19 @@ public void testWithUnmapped() {
284269
assertEquals(2, oldField.size());
285270

286271
assertTrue(oldField.containsKey("long"));
287-
assertEquals(
288-
new FieldCapabilities("old_field", "long", false, true, true, new String[] { "old_index" }, null, null, Collections.emptyMap()),
289-
oldField.get("long")
290-
);
272+
assertEquals(new FieldCapabilitiesBuilder("old_field", "long").indices("old_index").build(), oldField.get("long"));
291273

292274
assertTrue(oldField.containsKey("unmapped"));
293275
assertEquals(
294-
new FieldCapabilities(
295-
"old_field",
296-
"unmapped",
297-
false,
298-
false,
299-
false,
300-
new String[] { "new_index" },
301-
null,
302-
null,
303-
Collections.emptyMap()
304-
),
276+
new FieldCapabilitiesBuilder("old_field", "unmapped").isSearchable(false).isAggregatable(false).indices("new_index").build(),
305277
oldField.get("unmapped")
306278
);
307279

308280
Map<String, FieldCapabilities> newField = response.getField("new_field");
309281
assertEquals(1, newField.size());
310282

311283
assertTrue(newField.containsKey("long"));
312-
assertEquals(
313-
new FieldCapabilities("new_field", "long", false, true, true, null, null, null, Collections.emptyMap()),
314-
newField.get("long")
315-
);
284+
assertEquals(new FieldCapabilitiesBuilder("new_field", "long").build(), newField.get("long"));
316285
}
317286

318287
public void testWithIndexAlias() {
@@ -431,18 +400,15 @@ public void testMetadataFields() {
431400

432401
assertTrue(idField.containsKey("_id"));
433402
assertEquals(
434-
new FieldCapabilities("_id", "_id", true, true, false, null, null, null, Collections.emptyMap()),
403+
new FieldCapabilitiesBuilder("_id", "_id").isMetadataField(true).isAggregatable(false).build(),
435404
idField.get("_id")
436405
);
437406

438407
Map<String, FieldCapabilities> testField = response.getField("_test");
439408
assertEquals(1, testField.size());
440409

441410
assertTrue(testField.containsKey("keyword"));
442-
assertEquals(
443-
new FieldCapabilities("_test", "keyword", true, true, true, null, null, null, Collections.emptyMap()),
444-
testField.get("keyword")
445-
);
411+
assertEquals(new FieldCapabilitiesBuilder("_test", "keyword").isMetadataField(true).build(), testField.get("keyword"));
446412
}
447413
}
448414

server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapsHasValueTests.java

Lines changed: 21 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.elasticsearch.action.DocWriteResponse;
1313
import org.elasticsearch.action.fieldcaps.FieldCapabilities;
14+
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesBuilder;
1415
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse;
1516
import org.elasticsearch.action.index.IndexRequestBuilder;
1617
import org.elasticsearch.action.support.ActiveShardCount;
@@ -76,10 +77,7 @@ public void testOnlyFieldsWithValueInIndex() {
7677
Map<String, FieldCapabilities> fooField = response.getField("foo");
7778
assertEquals(1, fooField.size());
7879
assertThat(fooField, Matchers.hasKey("text"));
79-
assertEquals(
80-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
81-
fooField.get("text")
82-
);
80+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
8381
}
8482

8583
public void testOnlyFieldsWithValueInAlias() {
@@ -94,10 +92,7 @@ public void testOnlyFieldsWithValueInAlias() {
9492
Map<String, FieldCapabilities> fooField = response.getField("foo");
9593
assertEquals(1, fooField.size());
9694
assertThat(fooField, Matchers.hasKey("text"));
97-
assertEquals(
98-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
99-
fooField.get("text")
100-
);
95+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
10196
}
10297

10398
public void testOnlyFieldsWithValueInSpecifiedIndex() {
@@ -112,10 +107,7 @@ public void testOnlyFieldsWithValueInSpecifiedIndex() {
112107
Map<String, FieldCapabilities> fooField = response.getField("foo");
113108
assertEquals(1, fooField.size());
114109
assertThat(fooField, Matchers.hasKey("text"));
115-
assertEquals(
116-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
117-
fooField.get("text")
118-
);
110+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
119111
}
120112

121113
public void testOnlyFieldsWithValueInSpecifiedAlias() {
@@ -130,10 +122,7 @@ public void testOnlyFieldsWithValueInSpecifiedAlias() {
130122
Map<String, FieldCapabilities> fooField = response.getField("foo");
131123
assertEquals(1, fooField.size());
132124
assertThat(fooField, Matchers.hasKey("text"));
133-
assertEquals(
134-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
135-
fooField.get("text")
136-
);
125+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
137126
}
138127

139128
public void testFieldsWithValueAfterUpdate() {
@@ -150,18 +139,12 @@ public void testFieldsWithValueAfterUpdate() {
150139
Map<String, FieldCapabilities> fooField = response.getField("foo");
151140
assertEquals(1, fooField.size());
152141
assertThat(fooField, Matchers.hasKey("text"));
153-
assertEquals(
154-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
155-
fooField.get("text")
156-
);
142+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
157143
// Check the capabilities for the 'bar' field.
158144
Map<String, FieldCapabilities> barField = response.getField("bar");
159145
assertEquals(1, barField.size());
160146
assertThat(barField, Matchers.hasKey("keyword"));
161-
assertEquals(
162-
new FieldCapabilities("bar", "keyword", false, true, true, null, null, null, Collections.emptyMap()),
163-
barField.get("keyword")
164-
);
147+
assertEquals(new FieldCapabilitiesBuilder("bar", "keyword").build(), barField.get("keyword"));
165148
}
166149

167150
public void testOnlyFieldsWithValueAfterNodesRestart() throws Exception {
@@ -177,10 +160,7 @@ public void testOnlyFieldsWithValueAfterNodesRestart() throws Exception {
177160
Map<String, FieldCapabilities> fooField = response.getField("foo");
178161
assertEquals(1, fooField.size());
179162
assertThat(fooField, Matchers.hasKey("text"));
180-
assertEquals(
181-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
182-
fooField.get("text")
183-
);
163+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
184164
}
185165

186166
public void testFieldsAndAliasWithValue() {
@@ -198,26 +178,17 @@ public void testFieldsAndAliasWithValue() {
198178
Map<String, FieldCapabilities> fooField = response.getField("foo");
199179
assertEquals(1, fooField.size());
200180
assertThat(fooField, Matchers.hasKey("text"));
201-
assertEquals(
202-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
203-
fooField.get("text")
204-
);
181+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
205182
// Check the capabilities for the 'bar' field.
206183
Map<String, FieldCapabilities> barField = response.getField("bar");
207184
assertEquals(1, barField.size());
208185
assertThat(barField, Matchers.hasKey("keyword"));
209-
assertEquals(
210-
new FieldCapabilities("bar", "keyword", false, true, true, null, null, null, Collections.emptyMap()),
211-
barField.get("keyword")
212-
);
186+
assertEquals(new FieldCapabilitiesBuilder("bar", "keyword").build(), barField.get("keyword"));
213187
// Check the capabilities for the 'bar-alias' field.
214188
Map<String, FieldCapabilities> barAlias = response.getField("bar-alias");
215189
assertEquals(1, barAlias.size());
216190
assertThat(barAlias, Matchers.hasKey("keyword"));
217-
assertEquals(
218-
new FieldCapabilities("bar-alias", "keyword", false, true, true, null, null, null, Collections.emptyMap()),
219-
barAlias.get("keyword")
220-
);
191+
assertEquals(new FieldCapabilitiesBuilder("bar-alias", "keyword").build(), barAlias.get("keyword"));
221192
}
222193

223194
public void testUnmappedFieldsWithValueAfterRestart() throws Exception {
@@ -238,7 +209,7 @@ public void testUnmappedFieldsWithValueAfterRestart() throws Exception {
238209
assertEquals(2, unmappedField.size());
239210
assertThat(unmappedField, Matchers.hasKey("text"));
240211
assertEquals(
241-
new FieldCapabilities("unmapped", "text", false, true, false, new String[] { INDEX1 }, null, null, Collections.emptyMap()),
212+
new FieldCapabilitiesBuilder("unmapped", "text").isAggregatable(false).indices(INDEX1).build(),
242213
unmappedField.get("text")
243214
);
244215
}
@@ -257,18 +228,12 @@ public void testTwoFieldsNameTwoIndices() {
257228
Map<String, FieldCapabilities> fooField = response.getField("foo");
258229
assertEquals(1, fooField.size());
259230
assertThat(fooField, Matchers.hasKey("text"));
260-
assertEquals(
261-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
262-
fooField.get("text")
263-
);
231+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
264232
// Check the capabilities for the 'bar' field.
265233
Map<String, FieldCapabilities> barField = response.getField("bar");
266234
assertEquals(1, barField.size());
267235
assertThat(barField, Matchers.hasKey("date"));
268-
assertEquals(
269-
new FieldCapabilities("bar", "date", false, true, true, null, null, null, Collections.emptyMap()),
270-
barField.get("date")
271-
);
236+
assertEquals(new FieldCapabilitiesBuilder("bar", "date").build(), barField.get("date"));
272237
}
273238

274239
public void testSameFieldNameTwoIndices() {
@@ -284,15 +249,9 @@ public void testSameFieldNameTwoIndices() {
284249
Map<String, FieldCapabilities> barField = response.getField("bar");
285250
assertEquals(2, barField.size());
286251
assertThat(barField, Matchers.hasKey("keyword"));
287-
assertEquals(
288-
new FieldCapabilities("bar", "keyword", false, true, true, new String[] { INDEX1 }, null, null, Collections.emptyMap()),
289-
barField.get("keyword")
290-
);
252+
assertEquals(new FieldCapabilitiesBuilder("bar", "keyword").indices(INDEX1).build(), barField.get("keyword"));
291253
assertThat(barField, Matchers.hasKey("date"));
292-
assertEquals(
293-
new FieldCapabilities("bar", "date", false, true, true, new String[] { INDEX2 }, null, null, Collections.emptyMap()),
294-
barField.get("date")
295-
);
254+
assertEquals(new FieldCapabilitiesBuilder("bar", "date").indices(INDEX2).build(), barField.get("date"));
296255
}
297256

298257
public void testDeletedDocsReturned() {
@@ -311,10 +270,7 @@ public void testDeletedDocsReturned() {
311270
Map<String, FieldCapabilities> fooField = response.getField("foo");
312271
assertEquals(1, fooField.size());
313272
assertThat(fooField, Matchers.hasKey("text"));
314-
assertEquals(
315-
new FieldCapabilities("foo", "text", false, true, false, null, null, null, Collections.emptyMap()),
316-
fooField.get("text")
317-
);
273+
assertEquals(new FieldCapabilitiesBuilder("foo", "text").isAggregatable(false).build(), fooField.get("text"));
318274
}
319275

320276
public void testNoNestedFieldsInEmptyIndex() {
@@ -339,15 +295,15 @@ public void testNestedFields() {
339295
assertEquals(1, nestedTypeField.size());
340296
assertThat(nestedTypeField, Matchers.hasKey("nested"));
341297
assertEquals(
342-
new FieldCapabilities("nested_type", "nested", false, false, false, null, null, null, Collections.emptyMap()),
298+
new FieldCapabilitiesBuilder("nested_type", "nested").isSearchable(false).isAggregatable(false).build(),
343299
nestedTypeField.get("nested")
344300
);
345301
// Check the capabilities for the 'nested_type.nested_field' field.
346302
Map<String, FieldCapabilities> nestedTypeNestedField = response.getField("nested_type.nested_field");
347303
assertEquals(1, nestedTypeNestedField.size());
348304
assertThat(nestedTypeNestedField, Matchers.hasKey("text"));
349305
assertEquals(
350-
new FieldCapabilities("nested_type.nested_field", "text", false, true, false, null, null, null, Collections.emptyMap()),
306+
new FieldCapabilitiesBuilder("nested_type.nested_field", "text").isAggregatable(false).build(),
351307
nestedTypeNestedField.get("text")
352308
);
353309
}
@@ -374,17 +330,14 @@ public void testObjectFields() {
374330
assertEquals(1, objectTypeField.size());
375331
assertThat(objectTypeField, Matchers.hasKey("object"));
376332
assertEquals(
377-
new FieldCapabilities("object", "object", false, false, false, null, null, null, Collections.emptyMap()),
333+
new FieldCapabilitiesBuilder("object", "object").isSearchable(false).isAggregatable(false).build(),
378334
objectTypeField.get("object")
379335
);
380336
// Check the capabilities for the 'object.sub_field' field.
381337
Map<String, FieldCapabilities> objectSubfield = response.getField("object.sub_field");
382338
assertEquals(1, objectSubfield.size());
383339
assertThat(objectSubfield, Matchers.hasKey("keyword"));
384-
assertEquals(
385-
new FieldCapabilities("object.sub_field", "keyword", false, true, true, null, null, null, Collections.emptyMap()),
386-
objectSubfield.get("keyword")
387-
);
340+
assertEquals(new FieldCapabilitiesBuilder("object.sub_field", "keyword").build(), objectSubfield.get("keyword"));
388341
}
389342

390343
public void testWithIndexFilter() throws InterruptedException {

0 commit comments

Comments
 (0)