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;
|
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
|
@Override
|
||||||
public Query existsQuery(QueryShardContext context) {
|
public Query existsQuery(QueryShardContext context) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
@ -479,6 +467,25 @@ public class TextFieldMapper extends FieldMapper {
|
||||||
}
|
}
|
||||||
return new PagedBytesIndexFieldData.Builder(fielddataMinFrequency, fielddataMaxFrequency, fielddataMinSegmentSize);
|
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;
|
private int positionIncrementGap;
|
||||||
|
|
|
@ -734,25 +734,6 @@ public class TextFieldMapperTests extends ESSingleNodeTestCase {
|
||||||
Query q6 = mapper.mappers().getMapper("field").fieldType().prefixQuery("goings",
|
Query q6 = mapper.mappers().getMapper("field").fieldType().prefixQuery("goings",
|
||||||
CONSTANT_SCORE_REWRITE, queryShardContext);
|
CONSTANT_SCORE_REWRITE, queryShardContext);
|
||||||
assertThat(q6, instanceOf(PrefixQuery.class));
|
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;
|
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.IndexOptions;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.TermInSetQuery;
|
|
||||||
import org.apache.lucene.search.FuzzyQuery;
|
import org.apache.lucene.search.FuzzyQuery;
|
||||||
import org.apache.lucene.search.RegexpQuery;
|
import org.apache.lucene.search.RegexpQuery;
|
||||||
|
import org.apache.lucene.search.TermInSetQuery;
|
||||||
import org.apache.lucene.search.TermQuery;
|
import org.apache.lucene.search.TermQuery;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.unit.Fuzziness;
|
import org.elasticsearch.common.unit.Fuzziness;
|
||||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
|
||||||
import org.elasticsearch.index.mapper.TextFieldMapper;
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class TextFieldTypeTests extends FieldTypeTestCase {
|
public class TextFieldTypeTests extends FieldTypeTestCase {
|
||||||
@Override
|
@Override
|
||||||
protected MappedFieldType createDefaultFieldType() {
|
protected MappedFieldType createDefaultFieldType() {
|
||||||
|
@ -71,7 +68,7 @@ public class TextFieldTypeTests extends FieldTypeTestCase {
|
||||||
tft.setFielddataMinSegmentSize(1000);
|
tft.setFielddataMinSegmentSize(1000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
addModifier(new Modifier("index_prefixes", true) {
|
addModifier(new Modifier("index_prefixes", false) {
|
||||||
@Override
|
@Override
|
||||||
public void modify(MappedFieldType ft) {
|
public void modify(MappedFieldType ft) {
|
||||||
TextFieldMapper.TextFieldType tft = (TextFieldMapper.TextFieldType)ft;
|
TextFieldMapper.TextFieldType tft = (TextFieldMapper.TextFieldType)ft;
|
||||||
|
|
Loading…
Reference in New Issue