77
88package org .elasticsearch .xpack .logsdb .patternedtext ;
99
10+ import org .apache .lucene .analysis .standard .StandardAnalyzer ;
1011import org .apache .lucene .document .Field ;
1112import org .apache .lucene .document .FieldType ;
1213import org .apache .lucene .document .SortedSetDocValuesField ;
1819import org .elasticsearch .common .util .FeatureFlag ;
1920import org .elasticsearch .index .IndexSettings ;
2021import org .elasticsearch .index .IndexVersion ;
21- import org .elasticsearch .index .analysis .IndexAnalyzers ;
22+ import org .elasticsearch .index .analysis .AnalyzerScope ;
2223import org .elasticsearch .index .analysis .NamedAnalyzer ;
2324import org .elasticsearch .index .mapper .CompositeSyntheticFieldLoader ;
2425import org .elasticsearch .index .mapper .DocumentParserContext ;
4647public class PatternedTextFieldMapper extends FieldMapper {
4748
4849 public static final FeatureFlag PATTERNED_TEXT_MAPPER = new FeatureFlag ("patterned_text" );
50+ private static final NamedAnalyzer STANDARD_ANALYZER = new NamedAnalyzer ("standard" , AnalyzerScope .GLOBAL , new StandardAnalyzer ());
4951
5052 public static class Defaults {
5153 public static final FieldType FIELD_TYPE_DOCS ;
@@ -77,39 +79,32 @@ public static class Builder extends FieldMapper.Builder {
7779 private final IndexVersion indexCreatedVersion ;
7880 private final IndexSettings indexSettings ;
7981 private final Parameter <Map <String , String >> meta = Parameter .metaParam ();
80- private final TextParams .Analyzers analyzers ;
8182 private final Parameter <String > indexOptions = patternedTextIndexOptions (m -> ((PatternedTextFieldMapper ) m ).indexOptions );
83+ private final Parameter <NamedAnalyzer > analyzer ;
8284
8385 public Builder (String name , MappingParserContext context ) {
84- this (name , context .indexVersionCreated (), context .getIndexSettings (), context . getIndexAnalyzers () );
86+ this (name , context .indexVersionCreated (), context .getIndexSettings ());
8587 }
8688
87- public Builder (String name , IndexVersion indexCreatedVersion , IndexSettings indexSettings , IndexAnalyzers indexAnalyzers ) {
89+ public Builder (String name , IndexVersion indexCreatedVersion , IndexSettings indexSettings ) {
8890 super (name );
8991 this .indexCreatedVersion = indexCreatedVersion ;
9092 this .indexSettings = indexSettings ;
91- this .analyzers = new TextParams .Analyzers (
92- indexAnalyzers ,
93- m -> ((PatternedTextFieldMapper ) m ).indexAnalyzer ,
94- m -> ((PatternedTextFieldMapper ) m ).positionIncrementGap ,
95- indexCreatedVersion
96- );
93+ this .analyzer = analyzerParam (name , m -> ((PatternedTextFieldMapper ) m ).analyzer );
9794 }
9895
9996 @ Override
10097 protected Parameter <?>[] getParameters () {
101- return new Parameter <?>[] { meta , indexOptions };
98+ return new Parameter <?>[] { meta , indexOptions , analyzer };
10299 }
103100
104101 private PatternedTextFieldType buildFieldType (FieldType fieldType , MapperBuilderContext context ) {
105- NamedAnalyzer searchAnalyzer = analyzers .getSearchAnalyzer ();
106- NamedAnalyzer searchQuoteAnalyzer = analyzers .getSearchQuoteAnalyzer ();
107- NamedAnalyzer indexAnalyzer = analyzers .getIndexAnalyzer ();
108- TextSearchInfo tsi = new TextSearchInfo (fieldType , null , searchAnalyzer , searchQuoteAnalyzer );
102+ NamedAnalyzer analyzer = this .analyzer .get ();
103+ TextSearchInfo tsi = new TextSearchInfo (fieldType , null , analyzer , analyzer );
109104 return new PatternedTextFieldType (
110105 context .buildFullName (leafName ()),
111106 tsi ,
112- indexAnalyzer ,
107+ analyzer ,
113108 context .isSourceSynthetic (),
114109 meta .getValue ()
115110 );
@@ -134,6 +129,22 @@ private static Parameter<String> patternedTextIndexOptions(Function<FieldMapper,
134129 });
135130 }
136131
132+ private static Parameter <NamedAnalyzer > analyzerParam (String name , Function <FieldMapper , NamedAnalyzer > initializer ) {
133+ return new Parameter <>("analyzer" , false , () -> DelimiterAnalyzer .INSTANCE , (n , c , o ) -> {
134+ String analyzerName = o .toString ();
135+ switch (analyzerName ) {
136+ case "standard" :
137+ return STANDARD_ANALYZER ;
138+ case "delimiter" :
139+ return DelimiterAnalyzer .INSTANCE ;
140+ default :
141+ throw new IllegalArgumentException (
142+ "unsupported analyzer [" + analyzerName + "] for field [" + name + "], supported analyzers are [standard, log]"
143+ );
144+ }
145+ }, initializer , (b , n , v ) -> b .field (n , v .name ()), NamedAnalyzer ::name );
146+ }
147+
137148 @ Override
138149 public PatternedTextFieldMapper build (MapperBuilderContext context ) {
139150 FieldType fieldType = buildLuceneFieldType (indexOptions );
@@ -152,11 +163,9 @@ public PatternedTextFieldMapper build(MapperBuilderContext context) {
152163 public static final TypeParser PARSER = new TypeParser (Builder ::new );
153164
154165 private final IndexVersion indexCreatedVersion ;
155- private final IndexAnalyzers indexAnalyzers ;
156- private final NamedAnalyzer indexAnalyzer ;
166+ private final NamedAnalyzer analyzer ;
157167 private final IndexSettings indexSettings ;
158168 private final String indexOptions ;
159- private final int positionIncrementGap ;
160169 private final FieldType fieldType ;
161170 private final KeywordFieldMapper templateIdMapper ;
162171
@@ -173,22 +182,20 @@ private PatternedTextFieldMapper(
173182 assert mappedFieldType .hasDocValues () == false ;
174183 this .fieldType = fieldType ;
175184 this .indexCreatedVersion = builder .indexCreatedVersion ;
176- this .indexAnalyzers = builder .analyzers .indexAnalyzers ;
177- this .indexAnalyzer = builder .analyzers .getIndexAnalyzer ();
185+ this .analyzer = builder .analyzer .get ();
178186 this .indexSettings = builder .indexSettings ;
179187 this .indexOptions = builder .indexOptions .getValue ();
180- this .positionIncrementGap = builder .analyzers .positionIncrementGap .getValue ();
181188 this .templateIdMapper = templateIdMapper ;
182189 }
183190
184191 @ Override
185192 public Map <String , NamedAnalyzer > indexAnalyzers () {
186- return Map .of (mappedFieldType .name (), indexAnalyzer );
193+ return Map .of (mappedFieldType .name (), analyzer );
187194 }
188195
189196 @ Override
190197 public FieldMapper .Builder getMergeBuilder () {
191- return new Builder (leafName (), indexCreatedVersion , indexSettings , indexAnalyzers ).init (this );
198+ return new Builder (leafName (), indexCreatedVersion , indexSettings ).init (this );
192199 }
193200
194201 @ Override
@@ -269,4 +276,8 @@ protected SyntheticSourceSupport syntheticSourceSupport() {
269276 )
270277 );
271278 }
279+
280+ NamedAnalyzer getAnalyzer () {
281+ return analyzer ;
282+ }
272283}
0 commit comments