Ensure that index_prefixes settings cannot be changed (#30967)
This commit is contained in:
parent
11887fa54a
commit
b8fda588f4
|
@ -288,18 +288,6 @@ public class TextFieldMapper extends FieldMapper {
|
|||
return super.toString() + ",prefixChars=" + minChars + ":" + maxChars;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCompatibility(MappedFieldType other, List<String> conflicts) {
|
||||
super.checkCompatibility(other, conflicts);
|
||||
PrefixFieldType otherFieldType = (PrefixFieldType) other;
|
||||
if (otherFieldType.minChars != this.minChars) {
|
||||
conflicts.add("mapper [" + name() + "] has different min_chars values");
|
||||
}
|
||||
if (otherFieldType.maxChars != this.maxChars) {
|
||||
conflicts.add("mapper [" + name() + "] has different max_chars values");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Query existsQuery(QueryShardContext context) {
|
||||
throw new UnsupportedOperationException();
|
||||
|
@ -479,6 +467,25 @@ public class TextFieldMapper extends FieldMapper {
|
|||
}
|
||||
return new PagedBytesIndexFieldData.Builder(fielddataMinFrequency, fielddataMaxFrequency, fielddataMinSegmentSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCompatibility(MappedFieldType other, List<String> conflicts) {
|
||||
super.checkCompatibility(other, conflicts);
|
||||
TextFieldType tft = (TextFieldType) other;
|
||||
if (Objects.equals(this.prefixFieldType, tft.prefixFieldType) == false) {
|
||||
if (this.prefixFieldType == null) {
|
||||
conflicts.add("mapper [" + name()
|
||||
+ "] has different [index_prefixes] settings, cannot change from disabled to enabled");
|
||||
}
|
||||
else if (tft.prefixFieldType == null) {
|
||||
conflicts.add("mapper [" + name()
|
||||
+ "] has different [index_prefixes] settings, cannot change from enabled to disabled");
|
||||
}
|
||||
else {
|
||||
conflicts.add("mapper [" + name() + "] has different [index_prefixes] settings");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int positionIncrementGap;
|
||||
|
|
|
@ -734,25 +734,6 @@ public class TextFieldMapperTests extends ESSingleNodeTestCase {
|
|||
Query q6 = mapper.mappers().getMapper("field").fieldType().prefixQuery("goings",
|
||||
CONSTANT_SCORE_REWRITE, queryShardContext);
|
||||
assertThat(q6, instanceOf(PrefixQuery.class));
|
||||
|
||||
indexService.mapperService().merge("type", json, MergeReason.MAPPING_UPDATE);
|
||||
|
||||
String badUpdate = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type")
|
||||
.startObject("properties").startObject("field")
|
||||
.field("type", "text")
|
||||
.field("analyzer", "english")
|
||||
.startObject("index_prefixes")
|
||||
.field("min_chars", 1)
|
||||
.field("max_chars", 10)
|
||||
.endObject()
|
||||
.endObject().endObject()
|
||||
.endObject().endObject());
|
||||
|
||||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> {
|
||||
indexService.mapperService()
|
||||
.merge("type", new CompressedXContent(badUpdate), MergeReason.MAPPING_UPDATE);
|
||||
});
|
||||
assertThat(e.getMessage(), containsString("mapper [field._index_prefix] has different min_chars values"));
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -18,23 +18,20 @@
|
|||
*/
|
||||
package org.elasticsearch.index.mapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.lucene.document.LongPoint;
|
||||
import org.apache.lucene.index.IndexOptions;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.TermInSetQuery;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
import org.apache.lucene.search.RegexpQuery;
|
||||
import org.apache.lucene.search.TermInSetQuery;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.common.unit.Fuzziness;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
import org.elasticsearch.index.mapper.TextFieldMapper;
|
||||
import org.junit.Before;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class TextFieldTypeTests extends FieldTypeTestCase {
|
||||
@Override
|
||||
protected MappedFieldType createDefaultFieldType() {
|
||||
|
@ -71,7 +68,7 @@ public class TextFieldTypeTests extends FieldTypeTestCase {
|
|||
tft.setFielddataMinSegmentSize(1000);
|
||||
}
|
||||
});
|
||||
addModifier(new Modifier("index_prefixes", true) {
|
||||
addModifier(new Modifier("index_prefixes", false) {
|
||||
@Override
|
||||
public void modify(MappedFieldType ft) {
|
||||
TextFieldMapper.TextFieldType tft = (TextFieldMapper.TextFieldType)ft;
|
||||
|
|
Loading…
Reference in New Issue