Skip to content

Commit b03e5ea

Browse files
committed
Avoid creating a _field_names field if norms are enabled.
1 parent 2be290d commit b03e5ea

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -369,17 +369,19 @@ protected void parseCreateField(ParseContext context, List<IndexableField> field
369369

370370
// convert to utf8 only once before feeding postings/dv/stored fields
371371
final BytesRef binaryValue = new BytesRef(value);
372-
if (fieldType().indexOptions() != IndexOptions.NONE || fieldType().stored()) {
372+
if (fieldType().indexOptions() != IndexOptions.NONE || fieldType().stored()) {
373373
Field field = new Field(fieldType().name(), binaryValue, fieldType());
374374
fields.add(field);
375+
376+
if (!fieldType().hasDocValues() && fieldType().omitNorms()) {
377+
createFieldNamesField(context, fields);
378+
}
375379
}
380+
376381
if (fieldType().hasDocValues()) {
377382
fields.add(new SortedSetDocValuesField(fieldType().name(), binaryValue));
378-
} else if (fieldType().stored() || fieldType().indexOptions() != IndexOptions.NONE) {
379-
createFieldNamesField(context, fields);
380383
}
381384
}
382-
383385
@Override
384386
protected String contentType() {
385387
return CONTENT_TYPE;

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,16 @@ public void testBoost() throws IOException {
321321

322322
public void testEnableNorms() throws IOException {
323323
String mapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type")
324-
.startObject("properties").startObject("field").field("type", "keyword").field("norms", true).endObject().endObject()
325-
.endObject().endObject());
324+
.startObject("properties")
325+
.startObject("field")
326+
.field("type", "keyword")
327+
.field("doc_values", false)
328+
.field("norms", true)
329+
.endObject()
330+
.endObject()
331+
.endObject().endObject());
326332

327333
DocumentMapper mapper = parser.parse("type", new CompressedXContent(mapping));
328-
329334
assertEquals(mapping, mapper.mappingSource().toString());
330335

331336
ParsedDocument doc = mapper.parse(SourceToParse.source("test", "type", "1", BytesReference
@@ -336,8 +341,11 @@ public void testEnableNorms() throws IOException {
336341
XContentType.JSON));
337342

338343
IndexableField[] fields = doc.rootDoc().getFields("field");
339-
assertEquals(2, fields.length);
344+
assertEquals(1, fields.length);
340345
assertFalse(fields[0].fieldType().omitNorms());
346+
347+
IndexableField[] fieldNamesFields = doc.rootDoc().getFields(FieldNamesFieldMapper.NAME);
348+
assertEquals(0, fieldNamesFields.length);
341349
}
342350

343351
public void testNormalizer() throws IOException {

0 commit comments

Comments
 (0)