Browse Source

Remove mapping boost parameter entirely (#62639)

Follow up to #62623, this commit removes support in 8x for index-time boosts.
There is no longer a boost field on MappedFieldType. Indexes created in 8x
and after will throw exceptions if a boost parameter is included in mappings,
and indexes created in 7x will emit warnings.
Alan Woodward 5 years ago
parent
commit
b1d6d42a68
22 changed files with 75 additions and 200 deletions
  1. 6 5
      docs/reference/migration/migrate_8_0/mappings.asciidoc
  2. 3 16
      modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java
  3. 1 3
      server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java
  4. 2 9
      server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java
  5. 0 10
      server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java
  6. 4 6
      server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java
  7. 1 12
      server/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java
  8. 14 29
      server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java
  9. 13 11
      server/src/main/java/org/elasticsearch/index/mapper/ParametrizedFieldMapper.java
  10. 2 9
      server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java
  11. 2 11
      server/src/main/java/org/elasticsearch/index/mapper/TermBasedFieldType.java
  12. 10 7
      server/src/main/java/org/elasticsearch/index/mapper/TypeParsers.java
  13. 0 19
      server/src/test/java/org/elasticsearch/index/mapper/BooleanFieldMapperTests.java
  14. 0 5
      server/src/test/java/org/elasticsearch/index/mapper/DateFieldMapperTests.java
  15. 0 11
      server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldMapperTests.java
  16. 2 2
      server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java
  17. 0 5
      server/src/test/java/org/elasticsearch/index/mapper/RangeFieldMapperTests.java
  18. 0 14
      server/src/test/java/org/elasticsearch/index/search/MultiMatchQueryTests.java
  19. 0 4
      test/framework/src/main/java/org/elasticsearch/index/mapper/FieldMapperTestCase.java
  20. 0 3
      test/framework/src/main/java/org/elasticsearch/index/mapper/FieldMapperTestCase2.java
  21. 14 3
      test/framework/src/main/java/org/elasticsearch/index/mapper/MapperTestCase.java
  22. 1 6
      x-pack/plugin/mapper-flattened/src/main/java/org/elasticsearch/xpack/flattened/mapper/FlatObjectFieldMapper.java

+ 6 - 5
docs/reference/migration/migrate_8_0/mappings.asciidoc

@@ -64,14 +64,15 @@ Disabling _field_names is not necessary because it no longer carries a large ind
 ====
 
 [[mapping-boosts]]
-.The `boost` parameter on field mappings has been deprecated
+.The `boost` parameter on field mappings has been removed
 [%collapsible]
 ====
 *Details* +
-Index-time boosts have been deprecated since the 5x line, but it is still possible
-to declare field-specific boosts in the mappings.  This is now deprecated as well,
-and will be removed entirely in 8.0.  Mappings containing field boosts will continue
-to work in 7.x but will emit a deprecation warning.
+Index-time boosts have been deprecated since the 5x line, but it was still possible
+to declare field-specific boosts in the mappings.  This is now removed completely.
+Indexes built in 7x that contain mapping boosts will emit warnings, and the boosts
+will have no effect in 8.0.  New indexes will not permit boosts to be set in their
+mappings at all.
 
 *Impact* +
 The `boost` setting should be removed from templates and mappings.  Use boosts

+ 3 - 16
modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java

@@ -24,7 +24,6 @@ import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.lucene.index.SortedNumericDocValues;
-import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.common.Explicit;
@@ -157,11 +156,7 @@ public class ScaledFloatFieldMapper extends ParametrizedFieldMapper {
         public Query termQuery(Object value, QueryShardContext context) {
             failIfNotIndexed();
             long scaledValue = Math.round(scale(value));
-            Query query = NumberFieldMapper.NumberType.LONG.termQuery(name(), scaledValue);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return NumberFieldMapper.NumberType.LONG.termQuery(name(), scaledValue);
         }
 
         @Override
@@ -172,11 +167,7 @@ public class ScaledFloatFieldMapper extends ParametrizedFieldMapper {
                 long scaledValue = Math.round(scale(value));
                 scaledValues.add(scaledValue);
             }
-            Query query = NumberFieldMapper.NumberType.LONG.termsQuery(name(), Collections.unmodifiableList(scaledValues));
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return NumberFieldMapper.NumberType.LONG.termsQuery(name(), Collections.unmodifiableList(scaledValues));
         }
 
         @Override
@@ -198,11 +189,7 @@ public class ScaledFloatFieldMapper extends ParametrizedFieldMapper {
                 }
                 hi = Math.round(Math.floor(dValue));
             }
-            Query query = NumberFieldMapper.NumberType.LONG.rangeQuery(name(), lo, hi, true, true, hasDocValues(), context);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return NumberFieldMapper.NumberType.LONG.rangeQuery(name(), lo, hi, true, true, hasDocValues(), context);
         }
 
         @Override

+ 1 - 3
server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java

@@ -82,7 +82,6 @@ public class BooleanFieldMapper extends ParametrizedFieldMapper {
             (n, c, o) -> o == null ? null : XContentMapValues.nodeBooleanValue(o), m -> toType(m).nullValue)
             .acceptsNull();
 
-        private final Parameter<Float> boost = Parameter.boostParam();
         private final Parameter<Map<String, String>> meta = Parameter.metaParam();
 
         public Builder(String name) {
@@ -91,14 +90,13 @@ public class BooleanFieldMapper extends ParametrizedFieldMapper {
 
         @Override
         protected List<Parameter<?>> getParameters() {
-            return List.of(meta, boost, docValues, indexed, nullValue, stored);
+            return List.of(meta, docValues, indexed, nullValue, stored);
         }
 
         @Override
         public BooleanFieldMapper build(BuilderContext context) {
             MappedFieldType ft = new BooleanFieldType(buildFullName(context), indexed.getValue(), stored.getValue(),
                 docValues.getValue(), meta.getValue());
-            ft.setBoost(boost.getValue());
             return new BooleanFieldMapper(name, ft, multiFieldsBuilder.build(this, context), copyTo.build(), this);
         }
     }

+ 2 - 9
server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java

@@ -24,7 +24,6 @@ import org.apache.lucene.document.SortedNumericDocValuesField;
 import org.apache.lucene.document.StoredField;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.PointValues;
-import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.IndexOrDocValuesQuery;
 import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
 import org.apache.lucene.search.Query;
@@ -188,7 +187,6 @@ public final class DateFieldMapper extends ParametrizedFieldMapper {
         private final Parameter<Boolean> docValues = Parameter.docValuesParam(m -> toType(m).hasDocValues, true);
         private final Parameter<Boolean> store = Parameter.storeParam(m -> toType(m).store, false);
 
-        private final Parameter<Float> boost = Parameter.boostParam();
         private final Parameter<Map<String, String>> meta = Parameter.metaParam();
 
         private final Parameter<String> format
@@ -226,7 +224,7 @@ public final class DateFieldMapper extends ParametrizedFieldMapper {
 
         @Override
         protected List<Parameter<?>> getParameters() {
-            return List.of(index, docValues, store, format, locale, nullValue, ignoreMalformed, boost, meta);
+            return List.of(index, docValues, store, format, locale, nullValue, ignoreMalformed, meta);
         }
 
         private Long parseNullValue(DateFieldType fieldType) {
@@ -250,7 +248,6 @@ public final class DateFieldMapper extends ParametrizedFieldMapper {
         public DateFieldMapper build(BuilderContext context) {
             DateFieldType ft = new DateFieldType(buildFullName(context), index.getValue(), store.getValue(), docValues.getValue(),
                 buildFormatter(), resolution, meta.getValue());
-            ft.setBoost(boost.getValue());
             Long nullTimestamp = parseNullValue(ft);
             return new DateFieldMapper(name, ft, multiFieldsBuilder.build(this, context),
                 copyTo.build(), nullTimestamp, resolution, this);
@@ -316,11 +313,7 @@ public final class DateFieldMapper extends ParametrizedFieldMapper {
 
         @Override
         public Query termQuery(Object value, @Nullable QueryShardContext context) {
-            Query query = rangeQuery(value, value, true, true, ShapeRelation.INTERSECTS, null, null, context);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return rangeQuery(value, value, true, true, ShapeRelation.INTERSECTS, null, null, context);
         }
 
         @Override

+ 0 - 10
server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java

@@ -64,7 +64,6 @@ public abstract class FieldMapper extends Mapper implements Cloneable {
         protected boolean indexed = true;
         protected final MultiFields.Builder multiFieldsBuilder;
         protected CopyTo copyTo = CopyTo.empty();
-        protected float boost = 1.0f;
         protected Map<String, String> meta = Collections.emptyMap();
         // TODO move to KeywordFieldMapper.Builder
         protected boolean eagerGlobalOrdinals;
@@ -128,11 +127,6 @@ public abstract class FieldMapper extends Mapper implements Cloneable {
             return builder;
         }
 
-        public T boost(float boost) {
-            this.boost = boost;
-            return builder;
-        }
-
         public T omitNorms(boolean omitNorms) {
             this.fieldType.setOmitNorms(omitNorms);
             this.omitNormsSet = true;
@@ -453,10 +447,6 @@ public abstract class FieldMapper extends Mapper implements Cloneable {
 
         builder.field("type", contentType());
 
-        if (includeDefaults || fieldType().boost() != 1.0f) {
-            builder.field("boost", fieldType().boost());
-        }
-
         if (includeDefaults || mappedFieldType.isSearchable() != indexedByDefault()) {
             builder.field("index", mappedFieldType.isSearchable());
         }

+ 4 - 6
server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java

@@ -104,7 +104,6 @@ public final class KeywordFieldMapper extends ParametrizedFieldMapper {
             = Parameter.boolParam("split_queries_on_whitespace", true, m -> toType(m).splitQueriesOnWhitespace, false);
 
         private final Parameter<Map<String, String>> meta = Parameter.metaParam();
-        private final Parameter<Float> boost = Parameter.boostParam();
 
         private final IndexAnalyzers indexAnalyzers;
 
@@ -153,7 +152,7 @@ public final class KeywordFieldMapper extends ParametrizedFieldMapper {
         @Override
         protected List<Parameter<?>> getParameters() {
             return List.of(indexed, hasDocValues, stored, nullValue, eagerGlobalOrdinals, ignoreAbove,
-                indexOptions, hasNorms, similarity, normalizer, splitQueriesOnWhitespace, boost, meta);
+                indexOptions, hasNorms, similarity, normalizer, splitQueriesOnWhitespace, meta);
         }
 
         private KeywordFieldType buildFieldType(BuilderContext context, FieldType fieldType) {
@@ -177,7 +176,7 @@ public final class KeywordFieldMapper extends ParametrizedFieldMapper {
             }
             return new KeywordFieldType(buildFullName(context), hasDocValues.getValue(), fieldType,
                 eagerGlobalOrdinals.getValue(), normalizer, searchAnalyzer,
-                similarity.getValue(), boost.getValue(), meta.getValue());
+                similarity.getValue(), meta.getValue());
         }
 
         @Override
@@ -198,12 +197,11 @@ public final class KeywordFieldMapper extends ParametrizedFieldMapper {
 
         public KeywordFieldType(String name, boolean hasDocValues, FieldType fieldType,
                                 boolean eagerGlobalOrdinals, NamedAnalyzer normalizer, NamedAnalyzer searchAnalyzer,
-                                SimilarityProvider similarity, float boost, Map<String, String> meta) {
+                                SimilarityProvider similarity, Map<String, String> meta) {
             super(name, fieldType.indexOptions() != IndexOptions.NONE, fieldType.stored(),
                 hasDocValues, new TextSearchInfo(fieldType, similarity, searchAnalyzer, searchAnalyzer), meta);
             setEagerGlobalOrdinals(eagerGlobalOrdinals);
             setIndexAnalyzer(normalizer);
-            setBoost(boost);
         }
 
         public KeywordFieldType(String name, boolean isSearchable, boolean hasDocValues, Map<String, String> meta) {
@@ -213,7 +211,7 @@ public final class KeywordFieldMapper extends ParametrizedFieldMapper {
 
         public KeywordFieldType(String name) {
             this(name, true, Defaults.FIELD_TYPE, false,
-                Lucene.KEYWORD_ANALYZER, Lucene.KEYWORD_ANALYZER, null, 1.0f, Collections.emptyMap());
+                Lucene.KEYWORD_ANALYZER, Lucene.KEYWORD_ANALYZER, null, Collections.emptyMap());
         }
 
         public KeywordFieldType(String name, NamedAnalyzer analyzer) {

+ 1 - 12
server/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java

@@ -71,13 +71,11 @@ public abstract class MappedFieldType {
     private final boolean isStored;
     private final TextSearchInfo textSearchInfo;
     private final Map<String, String> meta;
-    private float boost;
     private NamedAnalyzer indexAnalyzer;
     private boolean eagerGlobalOrdinals;
 
     public MappedFieldType(String name, boolean isIndexed, boolean isStored,
                            boolean hasDocValues, TextSearchInfo textSearchInfo, Map<String, String> meta) {
-        setBoost(1.0f);
         this.name = Objects.requireNonNull(name);
         this.isIndexed = isIndexed;
         this.isStored = isStored;
@@ -111,14 +109,6 @@ public abstract class MappedFieldType {
         return name;
     }
 
-    public float boost() {
-        return boost;
-    }
-
-    public void setBoost(float boost) {
-        this.boost = boost;
-    }
-
     public boolean hasDocValues() {
         return docValues;
     }
@@ -178,8 +168,7 @@ public abstract class MappedFieldType {
     }
 
     /** Generates a query that will only match documents that contain the given value.
-     *  The default implementation returns a {@link TermQuery} over the value bytes,
-     *  boosted by {@link #boost()}.
+     *  The default implementation returns a {@link TermQuery} over the value bytes
      *  @throws IllegalArgumentException if {@code value} cannot be converted to the expected data type or if the field is not searchable
      *      due to the way it is configured (eg. not indexed)
      *  @throws ElasticsearchParseException if {@code value} cannot be converted to the expected data type

+ 14 - 29
server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java

@@ -29,7 +29,6 @@ import org.apache.lucene.document.IntPoint;
 import org.apache.lucene.document.LongPoint;
 import org.apache.lucene.document.SortedNumericDocValuesField;
 import org.apache.lucene.document.StoredField;
-import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.IndexOrDocValuesQuery;
 import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
 import org.apache.lucene.search.MatchNoDocsQuery;
@@ -170,7 +169,7 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 float[] v = new float[values.size()];
                 for (int i = 0; i < values.size(); ++i) {
                     v[i] = parse(values.get(i), false);
@@ -267,7 +266,7 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 float[] v = new float[values.size()];
                 for (int i = 0; i < values.size(); ++i) {
                     v[i] = parse(values.get(i), false);
@@ -353,7 +352,7 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 double[] v = new double[values.size()];
                 for (int i = 0; i < values.size(); ++i) {
                     v[i] = parse(values.get(i), false);
@@ -439,7 +438,7 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 return INTEGER.termsQuery(field, values);
             }
 
@@ -496,7 +495,7 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 return INTEGER.termsQuery(field, values);
             }
 
@@ -557,12 +556,11 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 int[] v = new int[values.size()];
                 int upTo = 0;
 
-                for (int i = 0; i < values.size(); i++) {
-                    Object value = values.get(i);
+                for (Object value : values) {
                     if (!hasDecimalPart(value)) {
                         v[upTo++] = parse(value, true);
                     }
@@ -663,12 +661,11 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             }
 
             @Override
-            public Query termsQuery(String field, List<Object> values) {
+            public Query termsQuery(String field, List<?> values) {
                 long[] v = new long[values.size()];
                 int upTo = 0;
 
-                for (int i = 0; i < values.size(); i++) {
-                    Object value = values.get(i);
+                for (Object value : values) {
                     if (!hasDecimalPart(value)) {
                         v[upTo++] = parse(value, true);
                     }
@@ -739,7 +736,7 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
             return parser;
         }
         public abstract Query termQuery(String field, Object value);
-        public abstract Query termsQuery(String field, List<Object> values);
+        public abstract Query termsQuery(String field, List<?> values);
         public abstract Query rangeQuery(String field, Object lowerTerm, Object upperTerm,
                                          boolean includeLower, boolean includeUpper,
                                          boolean hasDocValues, QueryShardContext context);
@@ -917,31 +914,19 @@ public class NumberFieldMapper extends ParametrizedFieldMapper {
         @Override
         public Query termQuery(Object value, QueryShardContext context) {
             failIfNotIndexed();
-            Query query = type.termQuery(name(), value);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return type.termQuery(name(), value);
         }
 
         @Override
-        public Query termsQuery(List values, QueryShardContext context) {
+        public Query termsQuery(List<?> values, QueryShardContext context) {
             failIfNotIndexed();
-            Query query = type.termsQuery(name(), values);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return type.termsQuery(name(), values);
         }
 
         @Override
         public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper, QueryShardContext context) {
             failIfNotIndexed();
-            Query query = type.rangeQuery(name(), lowerTerm, upperTerm, includeLower, includeUpper, hasDocValues(), context);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return type.rangeQuery(name(), lowerTerm, upperTerm, includeLower, includeUpper, hasDocValues(), context);
         }
 
         @Override

+ 13 - 11
server/src/main/java/org/elasticsearch/index/mapper/ParametrizedFieldMapper.java

@@ -436,10 +436,6 @@ public abstract class ParametrizedFieldMapper extends FieldMapper {
             return Parameter.boolParam("doc_values", false, initializer, defaultValue);
         }
 
-        public static Parameter<Float> boostParam() {
-            return Parameter.floatParam("boost", true, m -> m.fieldType().boost(), 1.0f);
-        }
-
     }
 
     private static final class Conflicts {
@@ -565,6 +561,18 @@ public abstract class ParametrizedFieldMapper extends FieldMapper {
                     iterator.remove();
                     continue;
                 }
+                if (Objects.equals("boost", propName)) {
+                    if (parserContext.indexVersionCreated().before(Version.V_8_0_0)) {
+                        deprecationLogger.deprecate(
+                            "boost",
+                            "Parameter [boost] on field [{}] is deprecated and has no effect",
+                            name);
+                        iterator.remove();
+                        continue;
+                    } else {
+                        throw new MapperParsingException("Unknown parameter [boost] on mapper [" + name + "]");
+                    }
+                }
                 Parameter<?> parameter = deprecatedParamsMap.get(propName);
                 if (parameter != null) {
                     deprecationLogger.deprecate(propName, "Parameter [{}] on mapper [{}] is deprecated, use [{}]",
@@ -582,12 +590,6 @@ public abstract class ParametrizedFieldMapper extends FieldMapper {
                     throw new MapperParsingException("unknown parameter [" + propName
                         + "] on mapper [" + name + "] of type [" + type + "]");
                 }
-                if (Objects.equals("boost", propName)) {
-                    deprecationLogger.deprecate(
-                        "boost",
-                        "Parameter [boost] on field [{}] is deprecated and will be removed in 8.0",
-                        name);
-                }
                 if (propNode == null && parameter.acceptsNull == false) {
                     throw new MapperParsingException("[" + propName + "] on mapper [" + name
                         + "] of type [" + type + "] must not have a [null] value");
@@ -602,7 +604,7 @@ public abstract class ParametrizedFieldMapper extends FieldMapper {
         // made no sense; if we've got here, that means that they're not declared on a current mapper,
         // and so we emit a deprecation warning rather than failing a previously working mapping.
         private static final Set<String> DEPRECATED_PARAMS
-            = Set.of("store", "meta", "index", "doc_values", "boost", "index_options", "similarity");
+            = Set.of("store", "meta", "index", "doc_values", "index_options", "similarity");
 
         private static boolean isDeprecatedParameter(String propName, Version indexCreatedVersion) {
             if (indexCreatedVersion.onOrAfter(Version.V_8_0_0)) {

+ 2 - 9
server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java

@@ -19,7 +19,6 @@
 
 package org.elasticsearch.index.mapper;
 
-import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.ElasticsearchException;
@@ -89,7 +88,6 @@ public class RangeFieldMapper extends ParametrizedFieldMapper {
             = Parameter.stringParam("format", false, m -> toType(m).format, Defaults.DATE_FORMATTER.pattern());
         private final Parameter<Locale> locale = new Parameter<>("locale", false, () -> Locale.ROOT,
             (n, c, o) -> LocaleUtils.parse(o.toString()), m -> toType(m).locale);
-        private final Parameter<Float> boost = Parameter.boostParam();
         private final Parameter<Map<String, String>> meta = Parameter.metaParam();
 
         private final RangeType type;
@@ -119,7 +117,7 @@ public class RangeFieldMapper extends ParametrizedFieldMapper {
 
         @Override
         protected List<Parameter<?>> getParameters() {
-            return List.of(index, hasDocValues, store, coerce, format, locale, boost, meta);
+            return List.of(index, hasDocValues, store, coerce, format, locale, meta);
         }
 
         protected RangeFieldType setupFieldType(BuilderContext context) {
@@ -142,7 +140,6 @@ public class RangeFieldMapper extends ParametrizedFieldMapper {
         @Override
         public RangeFieldMapper build(BuilderContext context) {
             RangeFieldType ft = setupFieldType(context);
-            ft.setBoost(boost.getValue());
             return new RangeFieldMapper(name, ft, multiFieldsBuilder.build(this, context), copyTo.build(), type, this);
         }
     }
@@ -219,11 +216,7 @@ public class RangeFieldMapper extends ParametrizedFieldMapper {
 
         @Override
         public Query termQuery(Object value, QueryShardContext context) {
-            Query query = rangeQuery(value, value, true, true, ShapeRelation.INTERSECTS, null, null, context);
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return rangeQuery(value, value, true, true, ShapeRelation.INTERSECTS, null, null, context);
         }
 
         @Override

+ 2 - 11
server/src/main/java/org/elasticsearch/index/mapper/TermBasedFieldType.java

@@ -20,7 +20,6 @@
 package org.elasticsearch.index.mapper;
 
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermInSetQuery;
 import org.apache.lucene.search.TermQuery;
@@ -51,21 +50,13 @@ public abstract class TermBasedFieldType extends SimpleMappedFieldType {
     @Override
     public Query termQueryCaseInsensitive(Object value, QueryShardContext context) {
         failIfNotIndexed();
-        Query query = AutomatonQueries.caseInsensitiveTermQuery(new Term(name(), indexedValueForSearch(value)));
-        if (boost() != 1f) {
-            query = new BoostQuery(query, boost());
-        }
-        return query;
+        return AutomatonQueries.caseInsensitiveTermQuery(new Term(name(), indexedValueForSearch(value)));
     }
 
     @Override
     public Query termQuery(Object value, QueryShardContext context) {
         failIfNotIndexed();
-        Query query = new TermQuery(new Term(name(), indexedValueForSearch(value)));
-        if (boost() != 1f) {
-            query = new BoostQuery(query, boost());
-        }
-        return query;
+        return new TermQuery(new Term(name(), indexedValueForSearch(value)));
     }
 
     @Override

+ 10 - 7
server/src/main/java/org/elasticsearch/index/mapper/TypeParsers.java

@@ -38,7 +38,6 @@ import java.util.TreeMap;
 import java.util.function.Consumer;
 
 import static org.elasticsearch.common.xcontent.support.XContentMapValues.isArray;
-import static org.elasticsearch.common.xcontent.support.XContentMapValues.nodeFloatValue;
 import static org.elasticsearch.common.xcontent.support.XContentMapValues.nodeStringValue;
 
 public class TypeParsers {
@@ -245,12 +244,16 @@ public class TypeParsers {
                 builder.docValues(XContentMapValues.nodeBooleanValue(propNode, name + "." + DOC_VALUES));
                 iterator.remove();
             } else if (propName.equals("boost")) {
-                builder.boost(nodeFloatValue(propNode));
-                deprecationLogger.deprecate(
-                    "boost",
-                    "Parameter [boost] on field [{}] is deprecated and will be removed in 8.0",
-                    name);
-                iterator.remove();
+                if (parserContext.indexVersionCreated().before(Version.V_8_0_0)) {
+                    deprecationLogger.deprecate(
+                        "boost",
+                        "Parameter [boost] on field [{}] is deprecated and has no effect",
+                        name);
+                    iterator.remove();
+                }
+                else {
+                    throw new MapperParsingException("Unknown parameter [boost] on mapper [" + name + "]");
+                }
             } else if (propName.equals("index_options")) {
                 builder.indexOptions(nodeIndexOptionValue(propNode));
                 iterator.remove();

+ 0 - 19
server/src/test/java/org/elasticsearch/index/mapper/BooleanFieldMapperTests.java

@@ -23,9 +23,6 @@ import org.apache.lucene.index.DocValuesType;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.LeafReader;
 import org.apache.lucene.index.SortedNumericDocValues;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.BoostQuery;
-import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.Version;
 import org.elasticsearch.cluster.metadata.IndexMetadata;
@@ -53,11 +50,6 @@ public class BooleanFieldMapperTests extends MapperTestCase {
         b.field("type", "boolean");
     }
 
-    @Override
-    protected void assertParseMaximalWarnings() {
-        assertWarnings("Parameter [boost] on field [field] is deprecated and will be removed in 8.0");
-    }
-
     public void testExistsQueryDocValuesDisabled() throws IOException {
         MapperService mapperService = createMapperService(fieldMapping(b -> {
             minimalMapping(b);
@@ -180,17 +172,6 @@ public class BooleanFieldMapperTests extends MapperTestCase {
         assertEquals(DocValuesType.SORTED_NUMERIC, fields[1].fieldType().docValuesType());
     }
 
-    public void testBoosts() throws Exception {
-        MapperService mapperService = createMapperService(fieldMapping(b -> {
-            minimalMapping(b);
-            b.field("boost", 2.0);
-        }));
-
-        MappedFieldType ft = mapperService.fieldType("field");
-        assertEquals(new BoostQuery(new TermQuery(new Term("field", "T")), 2.0f), ft.termQuery("true", null));
-        assertParseMaximalWarnings();
-    }
-
     public void testFetchSourceValue() throws IOException {
         Settings settings = Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT.id).build();
         Mapper.BuilderContext context = new Mapper.BuilderContext(settings, new ContentPath());

+ 0 - 5
server/src/test/java/org/elasticsearch/index/mapper/DateFieldMapperTests.java

@@ -64,11 +64,6 @@ public class DateFieldMapperTests extends MapperTestCase {
         assertParseMinimalWarnings();
     }
 
-    @Override
-    protected void assertParseMaximalWarnings() {
-        assertWarnings("Parameter [boost] on field [field] is deprecated and will be removed in 8.0");
-    }
-
     public void testDefaults() throws Exception {
         DocumentMapper mapper = createDocumentMapper(fieldMapping(this::minimalMapping));
         ParsedDocument doc = mapper.parse(source(b -> b.field("field", "2016-03-11")));

+ 0 - 11
server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldMapperTests.java

@@ -159,11 +159,6 @@ public class KeywordFieldMapperTests extends MapperTestCase {
         b.field("type", "keyword");
     }
 
-    @Override
-    protected void assertParseMaximalWarnings() {
-        assertWarnings("Parameter [boost] on field [field] is deprecated and will be removed in 8.0");
-    }
-
     public void testDefaults() throws Exception {
         XContentBuilder mapping = fieldMapping(this::minimalMapping);
         DocumentMapper mapper = createDocumentMapper(mapping);
@@ -265,12 +260,6 @@ public class KeywordFieldMapperTests extends MapperTestCase {
         }
     }
 
-    public void testBoost() throws IOException {
-        MapperService mapperService = createMapperService(fieldMapping(b -> b.field("type", "keyword").field("boost", 2f)));
-        assertThat(mapperService.fieldType("field").boost(), equalTo(2f));
-        assertWarnings("Parameter [boost] on field [field] is deprecated and will be removed in 8.0");
-    }
-
     public void testEnableNorms() throws IOException {
         DocumentMapper mapper = createDocumentMapper(
             fieldMapping(b -> b.field("type", "keyword").field("doc_values", false).field("norms", true))

+ 2 - 2
server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java

@@ -110,8 +110,8 @@ public class KeywordFieldTypeTests extends FieldTypeTestCase {
         {
             FieldType fieldType = new FieldType();
             fieldType.setOmitNorms(false);
-            KeywordFieldType ft = new KeywordFieldType("field", false, fieldType, randomBoolean(), null, null, null, 1.0f,
-                Collections.emptyMap());
+            KeywordFieldType ft
+                = new KeywordFieldType("field", false, fieldType, randomBoolean(), null, null, null, Collections.emptyMap());
             assertEquals(new NormsFieldExistsQuery("field"), ft.existsQuery(null));
         }
         {

+ 0 - 5
server/src/test/java/org/elasticsearch/index/mapper/RangeFieldMapperTests.java

@@ -87,11 +87,6 @@ public class RangeFieldMapperTests extends AbstractNumericFieldMapperTestCase {
         assertParseMinimalWarnings();
     }
 
-    @Override
-    protected void assertParseMaximalWarnings() {
-        assertWarnings("Parameter [boost] on field [field] is deprecated and will be removed in 8.0");
-    }
-
     private Object getFrom(String type) {
         if (type.equals("date_range")) {
             return FROM_DATE;

+ 0 - 14
server/src/test/java/org/elasticsearch/index/search/MultiMatchQueryTests.java

@@ -131,20 +131,6 @@ public class MultiMatchQueryTests extends ESSingleNodeTestCase {
         assertEquals(expected, actual);
     }
 
-    public void testBlendTermsWithFieldBoosts() {
-        FakeFieldType ft1 = new FakeFieldType("foo");
-        ft1.setBoost(100);
-        FakeFieldType ft2 = new FakeFieldType("bar");
-        ft2.setBoost(10);
-        Term[] terms = new Term[] { new Term("foo", "baz"), new Term("bar", "baz") };
-        float[] boosts = new float[] {200, 30};
-        Query expected = BlendedTermQuery.dismaxBlendedQuery(terms, boosts, 1.0f);
-        Query actual = MultiMatchQuery.blendTerm(
-                indexService.newQueryShardContext(randomInt(20), null, () -> { throw new UnsupportedOperationException(); }, null),
-                new BytesRef("baz"), 1f, false, Arrays.asList(new FieldAndBoost(ft1, 2), new FieldAndBoost(ft2, 3)));
-        assertEquals(expected, actual);
-    }
-
     public void testBlendTermsUnsupportedValueWithLenient() {
         FakeFieldType ft1 = new FakeFieldType("foo");
         FakeFieldType ft2 = new FakeFieldType("bar") {

+ 0 - 4
test/framework/src/main/java/org/elasticsearch/index/mapper/FieldMapperTestCase.java

@@ -93,10 +93,6 @@ public abstract class FieldMapperTestCase<T extends FieldMapper.Builder<?>> exte
             a.indexAnalyzer(new NamedAnalyzer("standard", AnalyzerScope.INDEX, new StandardAnalyzer()));
             a.indexAnalyzer(new NamedAnalyzer("keyword", AnalyzerScope.INDEX, new KeywordAnalyzer()));
         }),
-        new Modifier("boost", true, (a, b) -> {
-           a.boost(1.1f);
-           b.boost(1.2f);
-        }),
         new Modifier("doc_values", false, (a, b) -> {
             a.docValues(true);
             b.docValues(false);

+ 0 - 3
test/framework/src/main/java/org/elasticsearch/index/mapper/FieldMapperTestCase2.java

@@ -75,9 +75,6 @@ public abstract class FieldMapperTestCase2<T extends FieldMapper.Builder<?>> ext
     private final List<Modifier> modifiers = new ArrayList<>(Arrays.asList(new Modifier("analyzer", false, (a, b) -> {
         a.indexAnalyzer(new NamedAnalyzer("standard", AnalyzerScope.INDEX, new StandardAnalyzer()));
         a.indexAnalyzer(new NamedAnalyzer("keyword", AnalyzerScope.INDEX, new KeywordAnalyzer()));
-    }), new Modifier("boost", true, (a, b) -> {
-        a.boost(1.1f);
-        b.boost(1.2f);
     }), new Modifier("doc_values", false, (a, b) -> {
         a.docValues(true);
         b.docValues(false);

+ 14 - 3
test/framework/src/main/java/org/elasticsearch/index/mapper/MapperTestCase.java

@@ -30,6 +30,7 @@ import org.apache.lucene.search.NormsFieldExistsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.util.SetOnce;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.bytes.BytesReference;
 import org.elasticsearch.common.xcontent.ToXContent;
@@ -247,17 +248,27 @@ public abstract class MapperTestCase extends MapperServiceTestCase {
 
     public final void testDeprecatedBoost() throws IOException {
         try {
-            createMapperService(fieldMapping(b -> {
+            createMapperService(Version.V_7_10_0, fieldMapping(b -> {
                 minimalMapping(b);
                 b.field("boost", 2.0);
             }));
-            assertWarnings("Parameter [boost] on field [field] is deprecated and will be removed in 8.0");
+            assertWarnings("Parameter [boost] on field [field] is deprecated and has no effect");
         }
         catch (MapperParsingException e) {
             assertThat(e.getMessage(), anyOf(
-                containsString("unknown parameter [boost]"),
+                containsString("Unknown parameter [boost]"),
                 containsString("[boost : 2.0]")));
         }
+
+        MapperParsingException e
+            = expectThrows(MapperParsingException.class, () -> createMapperService(Version.V_8_0_0, fieldMapping(b-> {
+                minimalMapping(b);
+                b.field("boost", 2.0);
+        })));
+        assertThat(e.getMessage(), anyOf(
+            containsString("Unknown parameter [boost]"),
+            containsString("[boost : 2.0]")));
+
         assertParseMinimalWarnings();
     }
 

+ 1 - 6
x-pack/plugin/mapper-flattened/src/main/java/org/elasticsearch/xpack/flattened/mapper/FlatObjectFieldMapper.java

@@ -12,7 +12,6 @@ import org.apache.lucene.index.IndexOptions;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.OrdinalMap;
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.MultiTermQuery;
 import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
@@ -299,11 +298,7 @@ public final class FlatObjectFieldMapper extends DynamicKeyFieldMapper {
 
         @Override
         public Query termQueryCaseInsensitive(Object value, QueryShardContext context) {
-            Query query = AutomatonQueries.caseInsensitiveTermQuery(new Term(name(), indexedValueForSearch(value)));
-            if (boost() != 1f) {
-                query = new BoostQuery(query, boost());
-            }
-            return query;
+            return AutomatonQueries.caseInsensitiveTermQuery(new Term(name(), indexedValueForSearch(value)));
         }
 
         @Override