Skip to content

Commit 0cd1dc3

Browse files
committed
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 fc5b2b2 commit 0cd1dc3

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
@@ -413,6 +413,7 @@ static void createQueryBuilderField(Version indexVersion, BinaryFieldMapper qbFi
413413
private static final FieldType INDEXED_KEYWORD = new FieldType();
414414
static {
415415
INDEXED_KEYWORD.setTokenized(false);
416+
INDEXED_KEYWORD.setOmitNorms(true);
416417
INDEXED_KEYWORD.setIndexOptions(IndexOptions.DOCS);
417418
INDEXED_KEYWORD.freeze();
418419
}

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,11 @@ public void testNestedPercolatorField() throws Exception {
665665
.endObject().endObject()),
666666
XContentType.JSON));
667667
assertThat(doc.rootDoc().getFields().size(), equalTo(12)); // also includes all other meta fields
668-
BytesRef queryBuilderAsBytes = doc.rootDoc().getField("object_field.query_field.query_builder_field").binaryValue();
668+
IndexableField queryBuilderField = doc.rootDoc().getField("object_field.query_field.query_builder_field");
669+
assertTrue(queryBuilderField.fieldType().omitNorms());
670+
IndexableField extractionResultField = doc.rootDoc().getField("object_field.query_field.extraction_result");
671+
assertTrue(extractionResultField.fieldType().omitNorms());
672+
BytesRef queryBuilderAsBytes = queryBuilderField.binaryValue();
669673
assertQueryBuilder(queryBuilderAsBytes, queryBuilder);
670674

671675
doc = mapperService.documentMapper(typeName).parse(new SourceToParse("test", typeName, "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)