Skip to content

Commit 9635484

Browse files
author
Christoph Büscher
committed
Deprecate and ignore _field_names disabling
Currently we allow `_field_names` fields to be disabled explicitely, but since the overhead is negligible now we decided to keep it turned on by default and deprecate and ignore the `enable` option on the field type. Closes #27239
1 parent 026f0f7 commit 9635484

File tree

4 files changed

+20
-63
lines changed

4 files changed

+20
-63
lines changed

modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorFieldMapperTests.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public void init() throws Exception {
146146
mapperService = indexService.mapperService();
147147

148148
String mapper = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("doc")
149-
.startObject("_field_names").field("enabled", false).endObject() // makes testing easier
149+
.startObject("_field_names").endObject() // makes testing easier
150150
.startObject("properties")
151151
.startObject("field").field("type", "text").endObject()
152152
.startObject("field1").field("type", "text").endObject()
@@ -322,7 +322,7 @@ public void testExtractTermsAndRanges_partial() throws Exception {
322322
ParseContext.Document document = parseContext.doc();
323323

324324
PercolatorFieldMapper.FieldType fieldType = (PercolatorFieldMapper.FieldType) fieldMapper.fieldType();
325-
assertThat(document.getFields().size(), equalTo(3));
325+
assertThat(document.getFields().size(), equalTo(4));
326326
assertThat(document.getFields().get(0).binaryValue().utf8ToString(), equalTo("field\u0000term"));
327327
assertThat(document.getField(fieldType.extractionResultField.name()).stringValue(), equalTo(EXTRACTION_PARTIAL));
328328
}
@@ -590,7 +590,7 @@ public void testAllowNoAdditionalSettings() throws Exception {
590590
public void testMultiplePercolatorFields() throws Exception {
591591
String typeName = "doc";
592592
String percolatorMapper = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject(typeName)
593-
.startObject("_field_names").field("enabled", false).endObject() // makes testing easier
593+
.startObject("_field_names").endObject() // makes testing easier
594594
.startObject("properties")
595595
.startObject("query_field1").field("type", "percolator").endObject()
596596
.startObject("query_field2").field("type", "percolator").endObject()
@@ -605,7 +605,8 @@ public void testMultiplePercolatorFields() throws Exception {
605605
.field("query_field2", queryBuilder)
606606
.endObject()),
607607
XContentType.JSON));
608-
assertThat(doc.rootDoc().getFields().size(), equalTo(14)); // also includes all other meta fields
608+
System.out.println(doc.rootDoc().getFields());
609+
assertThat(doc.rootDoc().getFields().size(), equalTo(16)); // also includes all other meta fields
609610
BytesRef queryBuilderAsBytes = doc.rootDoc().getField("query_field1.query_builder_field").binaryValue();
610611
assertQueryBuilder(queryBuilderAsBytes, queryBuilder);
611612

@@ -617,7 +618,7 @@ public void testMultiplePercolatorFields() throws Exception {
617618
public void testNestedPercolatorField() throws Exception {
618619
String typeName = "doc";
619620
String percolatorMapper = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject(typeName)
620-
.startObject("_field_names").field("enabled", false).endObject() // makes testing easier
621+
.startObject("_field_names").endObject() // makes testing easier
621622
.startObject("properties")
622623
.startObject("object_field")
623624
.field("type", "object")
@@ -635,7 +636,7 @@ public void testNestedPercolatorField() throws Exception {
635636
.field("query_field", queryBuilder)
636637
.endObject().endObject()),
637638
XContentType.JSON));
638-
assertThat(doc.rootDoc().getFields().size(), equalTo(10)); // also includes all other meta fields
639+
assertThat(doc.rootDoc().getFields().size(), equalTo(12)); // also includes all other meta fields
639640
BytesRef queryBuilderAsBytes = doc.rootDoc().getField("object_field.query_field.query_builder_field").binaryValue();
640641
assertQueryBuilder(queryBuilderAsBytes, queryBuilder);
641642

@@ -646,7 +647,7 @@ public void testNestedPercolatorField() throws Exception {
646647
.endArray()
647648
.endObject()),
648649
XContentType.JSON));
649-
assertThat(doc.rootDoc().getFields().size(), equalTo(10)); // also includes all other meta fields
650+
assertThat(doc.rootDoc().getFields().size(), equalTo(12)); // also includes all other meta fields
650651
queryBuilderAsBytes = doc.rootDoc().getField("object_field.query_field.query_builder_field").binaryValue();
651652
assertQueryBuilder(queryBuilderAsBytes, queryBuilder);
652653

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,28 +73,26 @@ public static class Defaults {
7373
}
7474

7575
private static class Builder extends MetadataFieldMapper.Builder<Builder, FieldNamesFieldMapper> {
76-
private boolean enabled = Defaults.ENABLED;
7776

7877
private Builder(MappedFieldType existing) {
7978
super(Defaults.NAME, existing == null ? Defaults.FIELD_TYPE : existing, Defaults.FIELD_TYPE);
8079
}
8180

82-
private Builder enabled(boolean enabled) {
83-
this.enabled = enabled;
84-
return this;
85-
}
86-
8781
@Override
8882
public FieldNamesFieldMapper build(BuilderContext context) {
8983
setupFieldType(context);
9084
fieldType.setHasDocValues(false);
9185
FieldNamesFieldType fieldNamesFieldType = (FieldNamesFieldType)fieldType;
92-
fieldNamesFieldType.setEnabled(enabled);
86+
fieldNamesFieldType.setEnabled(Defaults.ENABLED);
9387
return new FieldNamesFieldMapper(fieldType, context.indexSettings());
9488
}
9589
}
9690

9791
public static class TypeParser implements MetadataFieldMapper.TypeParser {
92+
public static final String ENABLED_DEPRECATION_MESSAGE = "Changing the `enabled` setting for `_field_names` fields is no "
93+
+ "longer necassary. Disabling it has almost no benefits anymore which is why we now ignore this setting and will "
94+
+ "remove it in a future major version.";
95+
9896
@Override
9997
public MetadataFieldMapper.Builder<?,?> parse(String name, Map<String, Object> node,
10098
ParserContext parserContext) throws MapperParsingException {
@@ -105,7 +103,9 @@ public MetadataFieldMapper.Builder<?,?> parse(String name, Map<String, Object> n
105103
String fieldName = entry.getKey();
106104
Object fieldNode = entry.getValue();
107105
if (fieldName.equals("enabled")) {
108-
builder.enabled(XContentMapValues.nodeBooleanValue(fieldNode, name + ".enabled"));
106+
deprecationLogger.deprecatedAndMaybeLog("field_names_enabled_parameter", ENABLED_DEPRECATION_MESSAGE);
107+
// just read the value and dump it on the floor
108+
XContentMapValues.nodeBooleanValue(fieldNode, name + ".enabled");
109109
iterator.remove();
110110
}
111111
}

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

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,17 @@ public void testExplicitEnabled() throws Exception {
114114
XContentType.JSON));
115115

116116
assertFieldNames(set("field"), doc);
117+
assertWarnings(FieldNamesFieldMapper.TypeParser.ENABLED_DEPRECATION_MESSAGE);
117118
}
118119

119-
public void testDisabled() throws Exception {
120+
public void testEnabledSettingLogsDeprecation() throws Exception {
120121
String mapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type")
121122
.startObject("_field_names").field("enabled", false).endObject()
122123
.endObject().endObject());
123124
DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser()
124125
.parse("type", new CompressedXContent(mapping));
125126
FieldNamesFieldMapper fieldNamesMapper = docMapper.metadataMapper(FieldNamesFieldMapper.class);
126-
assertFalse(fieldNamesMapper.fieldType().isEnabled());
127+
assertTrue(fieldNamesMapper.fieldType().isEnabled());
127128

128129
ParsedDocument doc = docMapper.parse(new SourceToParse("test", "type", "1",
129130
BytesReference.bytes(XContentFactory.jsonBuilder()
@@ -133,24 +134,6 @@ public void testDisabled() throws Exception {
133134
XContentType.JSON));
134135

135136
assertNull(doc.rootDoc().get("_field_names"));
136-
}
137-
138-
public void testMergingMappings() throws Exception {
139-
String enabledMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type")
140-
.startObject("_field_names").field("enabled", true).endObject()
141-
.endObject().endObject());
142-
String disabledMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type")
143-
.startObject("_field_names").field("enabled", false).endObject()
144-
.endObject().endObject());
145-
MapperService mapperService = createIndex("test").mapperService();
146-
147-
DocumentMapper mapperEnabled = mapperService.merge("type", new CompressedXContent(enabledMapping),
148-
MapperService.MergeReason.MAPPING_UPDATE);
149-
DocumentMapper mapperDisabled = mapperService.merge("type", new CompressedXContent(disabledMapping),
150-
MapperService.MergeReason.MAPPING_UPDATE);
151-
assertFalse(mapperDisabled.metadataMapper(FieldNamesFieldMapper.class).fieldType().isEnabled());
152-
153-
mapperEnabled = mapperService.merge("type", new CompressedXContent(enabledMapping), MapperService.MergeReason.MAPPING_UPDATE);
154-
assertTrue(mapperEnabled.metadataMapper(FieldNamesFieldMapper.class).fieldType().isEnabled());
137+
assertWarnings(FieldNamesFieldMapper.TypeParser.ENABLED_DEPRECATION_MESSAGE);
155138
}
156139
}

server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import org.apache.lucene.util.automaton.Automaton;
5151
import org.apache.lucene.util.automaton.Operations;
5252
import org.apache.lucene.util.automaton.TooComplexToDeterminizeException;
53-
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
5453
import org.elasticsearch.cluster.metadata.IndexMetaData;
5554
import org.elasticsearch.common.Strings;
5655
import org.elasticsearch.common.compress.CompressedXContent;
@@ -1064,32 +1063,6 @@ public void testExistsFieldQuery() throws Exception {
10641063
assertThat(query, equalTo(expected));
10651064
}
10661065

1067-
public void testDisabledFieldNamesField() throws Exception {
1068-
QueryShardContext context = createShardContext();
1069-
context.getMapperService().merge("_doc",
1070-
new CompressedXContent(
1071-
Strings.toString(PutMappingRequest.buildFromSimplifiedDef("_doc",
1072-
"foo", "type=text",
1073-
"_field_names", "enabled=false"))),
1074-
MapperService.MergeReason.MAPPING_UPDATE);
1075-
try {
1076-
QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder("foo:*");
1077-
Query query = queryBuilder.toQuery(context);
1078-
Query expected = new WildcardQuery(new Term("foo", "*"));
1079-
assertThat(query, equalTo(expected));
1080-
} finally {
1081-
// restore mappings as they were before
1082-
context.getMapperService().merge("_doc",
1083-
new CompressedXContent(
1084-
Strings.toString(PutMappingRequest.buildFromSimplifiedDef("_doc",
1085-
"foo", "type=text",
1086-
"_field_names", "enabled=true"))),
1087-
MapperService.MergeReason.MAPPING_UPDATE);
1088-
}
1089-
}
1090-
1091-
1092-
10931066
public void testFromJson() throws IOException {
10941067
String json =
10951068
"{\n" +

0 commit comments

Comments
 (0)