Skip to content

Commit 2ffb459

Browse files
committed
Disallow doc_values in the JSON field mapping. (#35282)
1 parent 4cdf2fa commit 2ffb459

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@ private static class Defaults {
9191

9292
static {
9393
FIELD_TYPE.setTokenized(false);
94-
FIELD_TYPE.setOmitNorms(true);
9594
FIELD_TYPE.setStored(false);
95+
FIELD_TYPE.setHasDocValues(false);
9696
FIELD_TYPE.setIndexOptions(IndexOptions.DOCS);
97+
FIELD_TYPE.setOmitNorms(true);
9798
FIELD_TYPE.freeze();
9899
}
99100

@@ -125,6 +126,14 @@ public Builder indexOptions(IndexOptions indexOptions) {
125126
return super.indexOptions(indexOptions);
126127
}
127128

129+
@Override
130+
public Builder docValues(boolean docValues) {
131+
if (docValues) {
132+
throw new IllegalArgumentException("[" + CONTENT_TYPE + "] fields do not support doc values");
133+
}
134+
return super.docValues(docValues);
135+
}
136+
128137
public Builder depthLimit(int depthLimit) {
129138
if (depthLimit < 0) {
130139
throw new IllegalArgumentException("[depth_limit] must be positive, got " + depthLimit);

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.elasticsearch.index.mapper;
2121

22+
import org.apache.lucene.index.DocValuesType;
2223
import org.apache.lucene.index.IndexableField;
2324
import org.apache.lucene.util.BytesRef;
2425
import org.elasticsearch.common.Strings;
@@ -87,6 +88,7 @@ public void testDefaults() throws Exception {
8788
assertEquals(new BytesRef("value"), fields[0].binaryValue());
8889
assertFalse(fields[0].fieldType().stored());
8990
assertTrue(fields[0].fieldType().omitNorms());
91+
assertEquals(DocValuesType.NONE, fields[0].fieldType().docValuesType());
9092

9193
IndexableField[] keyedFields = parsedDoc.rootDoc().getFields("field._keyed");
9294
assertEquals(1, keyedFields.length);
@@ -95,6 +97,7 @@ public void testDefaults() throws Exception {
9597
assertEquals(new BytesRef("key\0value"), keyedFields[0].binaryValue());
9698
assertFalse(keyedFields[0].fieldType().stored());
9799
assertTrue(keyedFields[0].fieldType().omitNorms());
100+
assertEquals(DocValuesType.NONE, keyedFields[0].fieldType().docValuesType());
98101

99102
IndexableField[] fieldNamesFields = parsedDoc.rootDoc().getFields(FieldNamesFieldMapper.NAME);
100103
assertEquals(1, fieldNamesFields.length);
@@ -127,6 +130,23 @@ public void testDisableIndex() throws Exception {
127130
assertEquals(0, fields.length);
128131
}
129132

133+
public void testEnableDocValues() throws Exception {
134+
String mapping = Strings.toString(XContentFactory.jsonBuilder().startObject()
135+
.startObject("type")
136+
.startObject("properties")
137+
.startObject("field")
138+
.field("type", "json")
139+
.field("doc_values", true)
140+
.endObject()
141+
.endObject()
142+
.endObject()
143+
.endObject());
144+
145+
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
146+
() -> parser.parse("type", new CompressedXContent(mapping)));
147+
assertEquals("[json] fields do not support doc values", e.getMessage());
148+
}
149+
130150
public void testEnableStore() throws Exception {
131151
String mapping = Strings.toString(XContentFactory.jsonBuilder().startObject()
132152
.startObject("type")

0 commit comments

Comments
 (0)