7
7
8
8
package org .elasticsearch .xpack .logsdb .patternedtext ;
9
9
10
+ import org .apache .lucene .analysis .standard .StandardAnalyzer ;
10
11
import org .apache .lucene .document .Field ;
11
12
import org .apache .lucene .document .FieldType ;
12
13
import org .apache .lucene .document .SortedSetDocValuesField ;
18
19
import org .elasticsearch .common .util .FeatureFlag ;
19
20
import org .elasticsearch .index .IndexSettings ;
20
21
import org .elasticsearch .index .IndexVersion ;
21
- import org .elasticsearch .index .analysis .IndexAnalyzers ;
22
+ import org .elasticsearch .index .analysis .AnalyzerScope ;
22
23
import org .elasticsearch .index .analysis .NamedAnalyzer ;
23
24
import org .elasticsearch .index .mapper .CompositeSyntheticFieldLoader ;
24
25
import org .elasticsearch .index .mapper .DocumentParserContext ;
46
47
public class PatternedTextFieldMapper extends FieldMapper {
47
48
48
49
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 ());
49
51
50
52
public static class Defaults {
51
53
public static final FieldType FIELD_TYPE_DOCS ;
@@ -77,39 +79,32 @@ public static class Builder extends FieldMapper.Builder {
77
79
private final IndexVersion indexCreatedVersion ;
78
80
private final IndexSettings indexSettings ;
79
81
private final Parameter <Map <String , String >> meta = Parameter .metaParam ();
80
- private final TextParams .Analyzers analyzers ;
81
82
private final Parameter <String > indexOptions = patternedTextIndexOptions (m -> ((PatternedTextFieldMapper ) m ).indexOptions );
83
+ private final Parameter <NamedAnalyzer > analyzer ;
82
84
83
85
public Builder (String name , MappingParserContext context ) {
84
- this (name , context .indexVersionCreated (), context .getIndexSettings (), context . getIndexAnalyzers () );
86
+ this (name , context .indexVersionCreated (), context .getIndexSettings ());
85
87
}
86
88
87
- public Builder (String name , IndexVersion indexCreatedVersion , IndexSettings indexSettings , IndexAnalyzers indexAnalyzers ) {
89
+ public Builder (String name , IndexVersion indexCreatedVersion , IndexSettings indexSettings ) {
88
90
super (name );
89
91
this .indexCreatedVersion = indexCreatedVersion ;
90
92
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 );
97
94
}
98
95
99
96
@ Override
100
97
protected Parameter <?>[] getParameters () {
101
- return new Parameter <?>[] { meta , indexOptions };
98
+ return new Parameter <?>[] { meta , indexOptions , analyzer };
102
99
}
103
100
104
101
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 );
109
104
return new PatternedTextFieldType (
110
105
context .buildFullName (leafName ()),
111
106
tsi ,
112
- indexAnalyzer ,
107
+ analyzer ,
113
108
context .isSourceSynthetic (),
114
109
meta .getValue ()
115
110
);
@@ -134,6 +129,22 @@ private static Parameter<String> patternedTextIndexOptions(Function<FieldMapper,
134
129
});
135
130
}
136
131
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
+
137
148
@ Override
138
149
public PatternedTextFieldMapper build (MapperBuilderContext context ) {
139
150
FieldType fieldType = buildLuceneFieldType (indexOptions );
@@ -152,11 +163,9 @@ public PatternedTextFieldMapper build(MapperBuilderContext context) {
152
163
public static final TypeParser PARSER = new TypeParser (Builder ::new );
153
164
154
165
private final IndexVersion indexCreatedVersion ;
155
- private final IndexAnalyzers indexAnalyzers ;
156
- private final NamedAnalyzer indexAnalyzer ;
166
+ private final NamedAnalyzer analyzer ;
157
167
private final IndexSettings indexSettings ;
158
168
private final String indexOptions ;
159
- private final int positionIncrementGap ;
160
169
private final FieldType fieldType ;
161
170
private final KeywordFieldMapper templateIdMapper ;
162
171
@@ -173,22 +182,20 @@ private PatternedTextFieldMapper(
173
182
assert mappedFieldType .hasDocValues () == false ;
174
183
this .fieldType = fieldType ;
175
184
this .indexCreatedVersion = builder .indexCreatedVersion ;
176
- this .indexAnalyzers = builder .analyzers .indexAnalyzers ;
177
- this .indexAnalyzer = builder .analyzers .getIndexAnalyzer ();
185
+ this .analyzer = builder .analyzer .get ();
178
186
this .indexSettings = builder .indexSettings ;
179
187
this .indexOptions = builder .indexOptions .getValue ();
180
- this .positionIncrementGap = builder .analyzers .positionIncrementGap .getValue ();
181
188
this .templateIdMapper = templateIdMapper ;
182
189
}
183
190
184
191
@ Override
185
192
public Map <String , NamedAnalyzer > indexAnalyzers () {
186
- return Map .of (mappedFieldType .name (), indexAnalyzer );
193
+ return Map .of (mappedFieldType .name (), analyzer );
187
194
}
188
195
189
196
@ Override
190
197
public FieldMapper .Builder getMergeBuilder () {
191
- return new Builder (leafName (), indexCreatedVersion , indexSettings , indexAnalyzers ).init (this );
198
+ return new Builder (leafName (), indexCreatedVersion , indexSettings ).init (this );
192
199
}
193
200
194
201
@ Override
@@ -269,4 +276,8 @@ protected SyntheticSourceSupport syntheticSourceSupport() {
269
276
)
270
277
);
271
278
}
279
+
280
+ NamedAnalyzer getAnalyzer () {
281
+ return analyzer ;
282
+ }
272
283
}
0 commit comments