@@ -274,7 +274,8 @@ public static class Builder extends FieldMapper.Builder {
274274
275275 private final Parameter <Map <String , String >> meta = Parameter .metaParam ();
276276
277- final TextParams .Analyzers analyzers ;
277+ final TextParams .AnalyzerParameters analyzers ;
278+ final IndexAnalyzers indexAnalyzers ;
278279
279280 public Builder (String name , IndexAnalyzers indexAnalyzers ) {
280281 this (name , Version .CURRENT , indexAnalyzers );
@@ -283,10 +284,9 @@ public Builder(String name, IndexAnalyzers indexAnalyzers) {
283284 public Builder (String name , Version indexCreatedVersion , IndexAnalyzers indexAnalyzers ) {
284285 super (name );
285286 this .indexCreatedVersion = indexCreatedVersion ;
286- this .analyzers = new TextParams .Analyzers (
287- indexAnalyzers ,
288- m -> ((TextFieldMapper ) m ).indexAnalyzer ,
289- m -> (((TextFieldMapper ) m ).positionIncrementGap ),
287+ this .indexAnalyzers = indexAnalyzers ;
288+ this .analyzers = new TextParams .AnalyzerParameters (
289+ m -> ((TextFieldMapper ) m ).analyzerConfiguration ,
290290 indexCreatedVersion
291291 );
292292 }
@@ -341,17 +341,11 @@ private TextFieldType buildFieldType(
341341 FieldType fieldType ,
342342 MultiFields multiFields ,
343343 MapperBuilderContext context ,
344- Version indexCreatedVersion
344+ Version indexCreatedVersion ,
345+ TextParams .Analyzers analyzers
345346 ) {
346- NamedAnalyzer searchAnalyzer = analyzers .getSearchAnalyzer ();
347- NamedAnalyzer searchQuoteAnalyzer = analyzers .getSearchQuoteAnalyzer ();
348- if (analyzers .positionIncrementGap .isConfigured ()) {
349- if (fieldType .indexOptions ().compareTo (IndexOptions .DOCS_AND_FREQS_AND_POSITIONS ) < 0 ) {
350- throw new IllegalArgumentException (
351- "Cannot set position_increment_gap on field [" + name + "] without positions enabled"
352- );
353- }
354- }
347+ NamedAnalyzer searchAnalyzer = analyzers .searchAnalyzer ();
348+ NamedAnalyzer searchQuoteAnalyzer = analyzers .searchQuoteAnalyzer ();
355349 TextSearchInfo tsi = new TextSearchInfo (fieldType , similarity .getValue (), searchAnalyzer , searchQuoteAnalyzer );
356350 TextFieldType ft ;
357351 if (indexCreatedVersion .isLegacyIndexVersion ()) {
@@ -390,7 +384,7 @@ private KeywordFieldMapper.KeywordFieldType syntheticSourceDelegate(FieldType fi
390384 return null ;
391385 }
392386
393- private SubFieldInfo buildPrefixInfo (MapperBuilderContext context , FieldType fieldType , TextFieldType tft ) {
387+ private SubFieldInfo buildPrefixInfo (MapperBuilderContext context , TextParams . Analyzers analyzers , FieldType fieldType , TextFieldType tft ) {
394388 if (indexPrefixes .get () == null ) {
395389 return null ;
396390 }
@@ -423,15 +417,15 @@ private SubFieldInfo buildPrefixInfo(MapperBuilderContext context, FieldType fie
423417 fullName + "._index_prefix" ,
424418 pft ,
425419 new PrefixWrappedAnalyzer (
426- analyzers .getIndexAnalyzer ().analyzer (),
427- analyzers .positionIncrementGap . get (),
420+ analyzers .indexAnalyzer ().analyzer (),
421+ analyzers .configuration (). posIncrementGap (),
428422 indexPrefixes .get ().minChars ,
429423 indexPrefixes .get ().maxChars
430424 )
431425 );
432426 }
433427
434- private SubFieldInfo buildPhraseInfo (FieldType fieldType , TextFieldType parent ) {
428+ private SubFieldInfo buildPhraseInfo (TextParams . Analyzers analyzers , FieldType fieldType , TextFieldType parent ) {
435429 if (indexPhrases .get () == false ) {
436430 return null ;
437431 }
@@ -444,15 +438,14 @@ private SubFieldInfo buildPhraseInfo(FieldType fieldType, TextFieldType parent)
444438 FieldType phraseFieldType = new FieldType (fieldType );
445439 parent .setIndexPhrases ();
446440 PhraseWrappedAnalyzer a = new PhraseWrappedAnalyzer (
447- analyzers .getIndexAnalyzer ().analyzer (),
448- analyzers .positionIncrementGap . get ()
441+ analyzers .indexAnalyzer ().analyzer (),
442+ analyzers .configuration (). posIncrementGap ()
449443 );
450444 return new SubFieldInfo (parent .name () + FAST_PHRASE_SUFFIX , phraseFieldType , a );
451445 }
452446
453- public Map <String , NamedAnalyzer > indexAnalyzers (String name , SubFieldInfo phraseFieldInfo , SubFieldInfo prefixFieldInfo ) {
447+ private Map <String , NamedAnalyzer > indexAnalyzers (String name , NamedAnalyzer main , SubFieldInfo phraseFieldInfo , SubFieldInfo prefixFieldInfo ) {
454448 Map <String , NamedAnalyzer > analyzers = new HashMap <>();
455- NamedAnalyzer main = this .analyzers .getIndexAnalyzer ();
456449 analyzers .put (name , main );
457450 if (phraseFieldInfo != null ) {
458451 analyzers .put (
@@ -471,6 +464,7 @@ public Map<String, NamedAnalyzer> indexAnalyzers(String name, SubFieldInfo phras
471464
472465 @ Override
473466 public TextFieldMapper build (MapperBuilderContext context ) {
467+ TextParams .Analyzers analyzers = this .analyzers .buildAnalyzers (indexAnalyzers );
474468 MultiFields multiFields = multiFieldsBuilder .build (this , context );
475469 FieldType fieldType = TextParams .buildFieldType (
476470 index ,
@@ -480,9 +474,16 @@ public TextFieldMapper build(MapperBuilderContext context) {
480474 indexCreatedVersion .isLegacyIndexVersion () ? () -> false : norms ,
481475 termVectors
482476 );
483- TextFieldType tft = buildFieldType (fieldType , multiFields , context , indexCreatedVersion );
484- SubFieldInfo phraseFieldInfo = buildPhraseInfo (fieldType , tft );
485- SubFieldInfo prefixFieldInfo = buildPrefixInfo (context , fieldType , tft );
477+ if (this .analyzers .positionIncrementGap .isConfigured ()) {
478+ if (fieldType .indexOptions ().compareTo (IndexOptions .DOCS_AND_FREQS_AND_POSITIONS ) < 0 ) {
479+ throw new IllegalArgumentException (
480+ "Cannot set position_increment_gap on field [" + name + "] without positions enabled"
481+ );
482+ }
483+ }
484+ TextFieldType tft = buildFieldType (fieldType , multiFields , context , indexCreatedVersion , analyzers );
485+ SubFieldInfo phraseFieldInfo = buildPhraseInfo (analyzers , fieldType , tft );
486+ SubFieldInfo prefixFieldInfo = buildPrefixInfo (context , analyzers , fieldType , tft );
486487 for (Mapper mapper : multiFields ) {
487488 if (mapper .name ().endsWith (FAST_PHRASE_SUFFIX ) || mapper .name ().endsWith (FAST_PREFIX_SUFFIX )) {
488489 throw new MapperParsingException ("Cannot use reserved field name [" + mapper .name () + "]" );
@@ -492,9 +493,10 @@ public TextFieldMapper build(MapperBuilderContext context) {
492493 name ,
493494 fieldType ,
494495 tft ,
495- indexAnalyzers (tft .name (), phraseFieldInfo , prefixFieldInfo ),
496+ indexAnalyzers (tft .name (), analyzers . indexAnalyzer (), phraseFieldInfo , prefixFieldInfo ),
496497 prefixFieldInfo ,
497498 phraseFieldInfo ,
499+ analyzers ,
498500 multiFields ,
499501 copyTo .build (),
500502 this
@@ -1150,16 +1152,18 @@ public Query existsQuery(SearchExecutionContext context) {
11501152 private final FieldType fieldType ;
11511153 private final SubFieldInfo prefixFieldInfo ;
11521154 private final SubFieldInfo phraseFieldInfo ;
1155+ private final TextParams .AnalyzerConfiguration analyzerConfiguration ;
11531156
11541157 private final Map <String , NamedAnalyzer > indexAnalyzerMap ;
11551158
1156- protected TextFieldMapper (
1159+ private TextFieldMapper (
11571160 String simpleName ,
11581161 FieldType fieldType ,
11591162 TextFieldType mappedFieldType ,
11601163 Map <String , NamedAnalyzer > indexAnalyzers ,
11611164 SubFieldInfo prefixFieldInfo ,
11621165 SubFieldInfo phraseFieldInfo ,
1166+ TextParams .Analyzers analyzers ,
11631167 MultiFields multiFields ,
11641168 CopyTo copyTo ,
11651169 Builder builder
@@ -1174,8 +1178,8 @@ protected TextFieldMapper(
11741178 this .prefixFieldInfo = prefixFieldInfo ;
11751179 this .phraseFieldInfo = phraseFieldInfo ;
11761180 this .indexCreatedVersion = builder .indexCreatedVersion ;
1177- this .indexAnalyzer = builder . analyzers .getIndexAnalyzer ();
1178- this .indexAnalyzers = builder .analyzers . indexAnalyzers ;
1181+ this .indexAnalyzer = analyzers .indexAnalyzer ();
1182+ this .indexAnalyzers = builder .indexAnalyzers ;
11791183 this .positionIncrementGap = builder .analyzers .positionIncrementGap .getValue ();
11801184 this .index = builder .index .getValue ();
11811185 this .store = builder .store .getValue ();
@@ -1189,6 +1193,7 @@ protected TextFieldMapper(
11891193 this .fieldData = builder .fieldData .get ();
11901194 this .indexPhrases = builder .indexPhrases .getValue ();
11911195 this .indexAnalyzerMap = Map .copyOf (indexAnalyzers );
1196+ this .analyzerConfiguration = analyzers .configuration ();
11921197 }
11931198
11941199 @ Override
0 commit comments