Skip to content

Commit 6734440

Browse files
authored
Percolator keyword fields should not store norms (#58899)
The refactoring in #57666 inadvertently enabled norms on two of the percolator subfields, leading to an increase in memory usage. This commit disables norms on these fields again.
1 parent 465998f commit 6734440

File tree

4 files changed

+10
-3
lines changed

4 files changed

+10
-3
lines changed

modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java

+1
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ static void createQueryBuilderField(Version indexVersion, BinaryFieldMapper qbFi
400400
private static final FieldType INDEXED_KEYWORD = new FieldType();
401401
static {
402402
INDEXED_KEYWORD.setTokenized(false);
403+
INDEXED_KEYWORD.setOmitNorms(true);
403404
INDEXED_KEYWORD.setIndexOptions(IndexOptions.DOCS);
404405
INDEXED_KEYWORD.freeze();
405406
}

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,11 @@ public void testNestedPercolatorField() throws Exception {
645645
.endObject().endObject()),
646646
XContentType.JSON));
647647
assertThat(doc.rootDoc().getFields().size(), equalTo(12)); // also includes all other meta fields
648-
BytesRef queryBuilderAsBytes = doc.rootDoc().getField("object_field.query_field.query_builder_field").binaryValue();
648+
IndexableField queryBuilderField = doc.rootDoc().getField("object_field.query_field.query_builder_field");
649+
assertTrue(queryBuilderField.fieldType().omitNorms());
650+
IndexableField extractionResultField = doc.rootDoc().getField("object_field.query_field.extraction_result");
651+
assertTrue(extractionResultField.fieldType().omitNorms());
652+
BytesRef queryBuilderAsBytes = queryBuilderField.binaryValue();
649653
assertQueryBuilder(queryBuilderAsBytes, queryBuilder);
650654

651655
doc = mapperService.documentMapper().parse(new SourceToParse("test", "1",

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
package org.elasticsearch.index.mapper;
2121

2222
import com.carrotsearch.hppc.ObjectArrayList;
23-
import org.apache.lucene.document.Field;
2423
import org.apache.lucene.document.FieldType;
24+
import org.apache.lucene.document.StoredField;
2525
import org.apache.lucene.index.IndexOptions;
2626
import org.apache.lucene.index.Term;
2727
import org.apache.lucene.search.DocValuesFieldExistsQuery;
@@ -59,6 +59,7 @@ public static class Defaults {
5959

6060
static {
6161
FIELD_TYPE.setIndexOptions(IndexOptions.NONE);
62+
FIELD_TYPE.setOmitNorms(true);
6263
FIELD_TYPE.freeze();
6364
}
6465
}
@@ -188,7 +189,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
188189
return;
189190
}
190191
if (fieldType.stored()) {
191-
context.doc().add(new Field(fieldType().name(), value, fieldType));
192+
context.doc().add(new StoredField(fieldType().name(), value));
192193
}
193194

194195
if (fieldType().hasDocValues()) {

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

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public abstract class CustomDocValuesField implements IndexableField {
3434
public static final FieldType TYPE = new FieldType();
3535
static {
3636
TYPE.setDocValuesType(DocValuesType.BINARY);
37+
TYPE.setOmitNorms(true);
3738
TYPE.freeze();
3839
}
3940

0 commit comments

Comments
 (0)