|
@@ -55,6 +55,7 @@ import org.elasticsearch.common.lucene.search.MultiPhrasePrefixQuery;
|
|
|
import org.elasticsearch.common.unit.Fuzziness;
|
|
import org.elasticsearch.common.unit.Fuzziness;
|
|
|
import org.elasticsearch.common.xcontent.support.XContentMapValues;
|
|
import org.elasticsearch.common.xcontent.support.XContentMapValues;
|
|
|
import org.elasticsearch.core.Nullable;
|
|
import org.elasticsearch.core.Nullable;
|
|
|
|
|
+import org.elasticsearch.index.IndexMode;
|
|
|
import org.elasticsearch.index.IndexVersion;
|
|
import org.elasticsearch.index.IndexVersion;
|
|
|
import org.elasticsearch.index.IndexVersions;
|
|
import org.elasticsearch.index.IndexVersions;
|
|
|
import org.elasticsearch.index.analysis.AnalyzerScope;
|
|
import org.elasticsearch.index.analysis.AnalyzerScope;
|
|
@@ -239,15 +240,17 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
|
|
|
|
|
private final IndexVersion indexCreatedVersion;
|
|
private final IndexVersion indexCreatedVersion;
|
|
|
private final Parameter<Boolean> store;
|
|
private final Parameter<Boolean> store;
|
|
|
|
|
+ private final Parameter<Boolean> norms;
|
|
|
|
|
|
|
|
private final boolean isSyntheticSourceEnabled;
|
|
private final boolean isSyntheticSourceEnabled;
|
|
|
|
|
|
|
|
|
|
+ private final IndexMode indexMode;
|
|
|
|
|
+
|
|
|
private final Parameter<Boolean> index = Parameter.indexParam(m -> ((TextFieldMapper) m).index, true);
|
|
private final Parameter<Boolean> index = Parameter.indexParam(m -> ((TextFieldMapper) m).index, true);
|
|
|
|
|
|
|
|
final Parameter<SimilarityProvider> similarity = TextParams.similarity(m -> ((TextFieldMapper) m).similarity);
|
|
final Parameter<SimilarityProvider> similarity = TextParams.similarity(m -> ((TextFieldMapper) m).similarity);
|
|
|
|
|
|
|
|
final Parameter<String> indexOptions = TextParams.textIndexOptions(m -> ((TextFieldMapper) m).indexOptions);
|
|
final Parameter<String> indexOptions = TextParams.textIndexOptions(m -> ((TextFieldMapper) m).indexOptions);
|
|
|
- final Parameter<Boolean> norms = TextParams.norms(true, m -> ((TextFieldMapper) m).norms);
|
|
|
|
|
final Parameter<String> termVectors = TextParams.termVectors(m -> ((TextFieldMapper) m).termVectors);
|
|
final Parameter<String> termVectors = TextParams.termVectors(m -> ((TextFieldMapper) m).termVectors);
|
|
|
|
|
|
|
|
final Parameter<Boolean> fieldData = Parameter.boolParam("fielddata", true, m -> ((TextFieldMapper) m).fieldData, false);
|
|
final Parameter<Boolean> fieldData = Parameter.boolParam("fielddata", true, m -> ((TextFieldMapper) m).fieldData, false);
|
|
@@ -290,18 +293,30 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
private final boolean withinMultiField;
|
|
private final boolean withinMultiField;
|
|
|
|
|
|
|
|
public Builder(String name, IndexAnalyzers indexAnalyzers, boolean isSyntheticSourceEnabled) {
|
|
public Builder(String name, IndexAnalyzers indexAnalyzers, boolean isSyntheticSourceEnabled) {
|
|
|
- this(name, IndexVersion.current(), indexAnalyzers, isSyntheticSourceEnabled, false);
|
|
|
|
|
|
|
+ this(name, IndexVersion.current(), null, indexAnalyzers, isSyntheticSourceEnabled, false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public Builder(
|
|
public Builder(
|
|
|
String name,
|
|
String name,
|
|
|
IndexVersion indexCreatedVersion,
|
|
IndexVersion indexCreatedVersion,
|
|
|
|
|
+ IndexMode indexMode,
|
|
|
IndexAnalyzers indexAnalyzers,
|
|
IndexAnalyzers indexAnalyzers,
|
|
|
boolean isSyntheticSourceEnabled,
|
|
boolean isSyntheticSourceEnabled,
|
|
|
boolean withinMultiField
|
|
boolean withinMultiField
|
|
|
) {
|
|
) {
|
|
|
super(name);
|
|
super(name);
|
|
|
|
|
|
|
|
|
|
+ this.indexCreatedVersion = indexCreatedVersion;
|
|
|
|
|
+ this.indexMode = indexMode;
|
|
|
|
|
+ this.isSyntheticSourceEnabled = isSyntheticSourceEnabled;
|
|
|
|
|
+ this.withinMultiField = withinMultiField;
|
|
|
|
|
+
|
|
|
|
|
+ // don't enable norms by default if the index is LOGSDB or TSDB based
|
|
|
|
|
+ this.norms = Parameter.normsParam(
|
|
|
|
|
+ m -> ((TextFieldMapper) m).norms,
|
|
|
|
|
+ () -> indexMode != IndexMode.LOGSDB && indexMode != IndexMode.TIME_SERIES
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
// If synthetic source is used we need to either store this field
|
|
// If synthetic source is used we need to either store this field
|
|
|
// to recreate the source or use keyword multi-fields for that.
|
|
// to recreate the source or use keyword multi-fields for that.
|
|
|
// So if there are no suitable multi-fields we will default to
|
|
// So if there are no suitable multi-fields we will default to
|
|
@@ -309,7 +324,6 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
//
|
|
//
|
|
|
// If 'store' parameter was explicitly provided we'll reject the request.
|
|
// If 'store' parameter was explicitly provided we'll reject the request.
|
|
|
// Note that if current builder is a multi field, then we don't need to store, given that responsibility lies with parent field
|
|
// Note that if current builder is a multi field, then we don't need to store, given that responsibility lies with parent field
|
|
|
- this.withinMultiField = withinMultiField;
|
|
|
|
|
this.store = Parameter.storeParam(m -> ((TextFieldMapper) m).store, () -> {
|
|
this.store = Parameter.storeParam(m -> ((TextFieldMapper) m).store, () -> {
|
|
|
if (multiFieldsNotStoredByDefaultIndexVersionCheck(indexCreatedVersion)) {
|
|
if (multiFieldsNotStoredByDefaultIndexVersionCheck(indexCreatedVersion)) {
|
|
|
return isSyntheticSourceEnabled
|
|
return isSyntheticSourceEnabled
|
|
@@ -319,14 +333,12 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
return isSyntheticSourceEnabled && multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
|
|
return isSyntheticSourceEnabled && multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
- this.indexCreatedVersion = indexCreatedVersion;
|
|
|
|
|
this.analyzers = new TextParams.Analyzers(
|
|
this.analyzers = new TextParams.Analyzers(
|
|
|
indexAnalyzers,
|
|
indexAnalyzers,
|
|
|
m -> ((TextFieldMapper) m).indexAnalyzer,
|
|
m -> ((TextFieldMapper) m).indexAnalyzer,
|
|
|
m -> (((TextFieldMapper) m).positionIncrementGap),
|
|
m -> (((TextFieldMapper) m).positionIncrementGap),
|
|
|
indexCreatedVersion
|
|
indexCreatedVersion
|
|
|
);
|
|
);
|
|
|
- this.isSyntheticSourceEnabled = isSyntheticSourceEnabled;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public static boolean multiFieldsNotStoredByDefaultIndexVersionCheck(IndexVersion indexCreatedVersion) {
|
|
public static boolean multiFieldsNotStoredByDefaultIndexVersionCheck(IndexVersion indexCreatedVersion) {
|
|
@@ -508,6 +520,7 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
(n, c) -> new Builder(
|
|
(n, c) -> new Builder(
|
|
|
n,
|
|
n,
|
|
|
c.indexVersionCreated(),
|
|
c.indexVersionCreated(),
|
|
|
|
|
+ c.getIndexSettings().getMode(),
|
|
|
c.getIndexAnalyzers(),
|
|
c.getIndexAnalyzers(),
|
|
|
SourceFieldMapper.isSynthetic(c.getIndexSettings()),
|
|
SourceFieldMapper.isSynthetic(c.getIndexSettings()),
|
|
|
c.isWithinMultiField()
|
|
c.isWithinMultiField()
|
|
@@ -1323,6 +1336,7 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private final IndexVersion indexCreatedVersion;
|
|
private final IndexVersion indexCreatedVersion;
|
|
|
|
|
+ private final IndexMode indexMode;
|
|
|
private final boolean index;
|
|
private final boolean index;
|
|
|
private final boolean store;
|
|
private final boolean store;
|
|
|
private final String indexOptions;
|
|
private final String indexOptions;
|
|
@@ -1361,6 +1375,7 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
this.prefixFieldInfo = prefixFieldInfo;
|
|
this.prefixFieldInfo = prefixFieldInfo;
|
|
|
this.phraseFieldInfo = phraseFieldInfo;
|
|
this.phraseFieldInfo = phraseFieldInfo;
|
|
|
this.indexCreatedVersion = builder.indexCreatedVersion;
|
|
this.indexCreatedVersion = builder.indexCreatedVersion;
|
|
|
|
|
+ this.indexMode = builder.indexMode;
|
|
|
this.indexAnalyzer = builder.analyzers.getIndexAnalyzer();
|
|
this.indexAnalyzer = builder.analyzers.getIndexAnalyzer();
|
|
|
this.indexAnalyzers = builder.analyzers.indexAnalyzers;
|
|
this.indexAnalyzers = builder.analyzers.indexAnalyzers;
|
|
|
this.positionIncrementGap = builder.analyzers.positionIncrementGap.getValue();
|
|
this.positionIncrementGap = builder.analyzers.positionIncrementGap.getValue();
|
|
@@ -1398,7 +1413,9 @@ public final class TextFieldMapper extends FieldMapper {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public FieldMapper.Builder getMergeBuilder() {
|
|
public FieldMapper.Builder getMergeBuilder() {
|
|
|
- return new Builder(leafName(), indexCreatedVersion, indexAnalyzers, isSyntheticSourceEnabled, isWithinMultiField).init(this);
|
|
|
|
|
|
|
+ return new Builder(leafName(), indexCreatedVersion, indexMode, indexAnalyzers, isSyntheticSourceEnabled, isWithinMultiField).init(
|
|
|
|
|
+ this
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|