1919
2020package org .elasticsearch .index .analysis ;
2121
22+ import org .apache .logging .log4j .LogManager ;
2223import org .apache .lucene .analysis .TokenFilter ;
2324import org .apache .lucene .analysis .TokenStream ;
2425import org .elasticsearch .Version ;
26+ import org .elasticsearch .common .logging .DeprecationLogger ;
2527import org .elasticsearch .indices .analysis .PreBuiltCacheFactory ;
2628import org .elasticsearch .indices .analysis .PreBuiltCacheFactory .CachingStrategy ;
2729
3234 * Provides pre-configured, shared {@link TokenFilter}s.
3335 */
3436public final class PreConfiguredTokenFilter extends PreConfiguredAnalysisComponent <TokenFilterFactory > {
37+
38+ private static final DeprecationLogger DEPRECATION_LOGGER
39+ = new DeprecationLogger (LogManager .getLogger (PreConfiguredTokenFilter .class ));
40+
3541 /**
3642 * Create a pre-configured token filter that may not vary at all.
3743 */
3844 public static PreConfiguredTokenFilter singleton (String name , boolean useFilterForMultitermQueries ,
3945 Function <TokenStream , TokenStream > create ) {
40- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , false , CachingStrategy .ONE ,
46+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , true , CachingStrategy .ONE ,
4147 (tokenStream , version ) -> create .apply (tokenStream ));
4248 }
4349
4450 /**
4551 * Create a pre-configured token filter that may not vary at all.
4652 */
4753 public static PreConfiguredTokenFilter singleton (String name , boolean useFilterForMultitermQueries ,
48- boolean useFilterForParsingSynonyms ,
54+ boolean allowForSynonymParsing ,
4955 Function <TokenStream , TokenStream > create ) {
50- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , useFilterForParsingSynonyms , CachingStrategy .ONE ,
56+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , allowForSynonymParsing , CachingStrategy .ONE ,
5157 (tokenStream , version ) -> create .apply (tokenStream ));
5258 }
5359
5460 /**
55- * Create a pre-configured token filter that may not vary at all .
61+ * Create a pre-configured token filter that may vary based on the Elasticsearch version .
5662 */
5763 public static PreConfiguredTokenFilter singletonWithVersion (String name , boolean useFilterForMultitermQueries ,
5864 BiFunction <TokenStream , Version , TokenStream > create ) {
59- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , false , CachingStrategy .ONE ,
65+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , true , CachingStrategy .ONE ,
6066 (tokenStream , version ) -> create .apply (tokenStream , version ));
6167 }
6268
69+ /**
70+ * Create a pre-configured token filter that may vary based on the Elasticsearch version.
71+ */
72+ public static PreConfiguredTokenFilter singletonWithVersion (String name , boolean useFilterForMultitermQueries ,
73+ boolean useFilterForParsingSynonyms ,
74+ BiFunction <TokenStream , Version , TokenStream > create ) {
75+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , useFilterForParsingSynonyms , CachingStrategy .ONE ,
76+ (tokenStream , version ) -> create .apply (tokenStream , version ));
77+ }
78+
6379 /**
6480 * Create a pre-configured token filter that may vary based on the Lucene version.
6581 */
6682 public static PreConfiguredTokenFilter luceneVersion (String name , boolean useFilterForMultitermQueries ,
6783 BiFunction <TokenStream , org .apache .lucene .util .Version , TokenStream > create ) {
68- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , false , CachingStrategy .LUCENE ,
84+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , true , CachingStrategy .LUCENE ,
6985 (tokenStream , version ) -> create .apply (tokenStream , version .luceneVersion ));
7086 }
7187
@@ -74,18 +90,18 @@ public static PreConfiguredTokenFilter luceneVersion(String name, boolean useFil
7490 */
7591 public static PreConfiguredTokenFilter elasticsearchVersion (String name , boolean useFilterForMultitermQueries ,
7692 BiFunction <TokenStream , org .elasticsearch .Version , TokenStream > create ) {
77- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , false , CachingStrategy .ELASTICSEARCH , create );
93+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , true , CachingStrategy .ELASTICSEARCH , create );
7894 }
7995
8096 private final boolean useFilterForMultitermQueries ;
81- private final boolean useFilterForParsingSynonyms ;
97+ private final boolean allowForSynonymParsing ;
8298 private final BiFunction <TokenStream , Version , TokenStream > create ;
8399
84- private PreConfiguredTokenFilter (String name , boolean useFilterForMultitermQueries , boolean useFilterForParsingSynonyms ,
100+ private PreConfiguredTokenFilter (String name , boolean useFilterForMultitermQueries , boolean allowForSynonymParsing ,
85101 PreBuiltCacheFactory .CachingStrategy cache , BiFunction <TokenStream , Version , TokenStream > create ) {
86102 super (name , cache );
87103 this .useFilterForMultitermQueries = useFilterForMultitermQueries ;
88- this .useFilterForParsingSynonyms = useFilterForParsingSynonyms ;
104+ this .allowForSynonymParsing = allowForSynonymParsing ;
89105 this .create = create ;
90106 }
91107
@@ -118,10 +134,17 @@ public TokenStream create(TokenStream tokenStream) {
118134
119135 @ Override
120136 public TokenFilterFactory getSynonymFilter () {
121- if (useFilterForParsingSynonyms ) {
137+ if (allowForSynonymParsing ) {
138+ return this ;
139+ }
140+ if (version .onOrAfter (Version .V_7_0_0 )) {
141+ throw new IllegalArgumentException ("Token filter [" + name () + "] cannot be used to parse synonyms" );
142+ }
143+ else {
144+ DEPRECATION_LOGGER .deprecatedAndMaybeLog (name (), "Token filter [" + name ()
145+ + "] will not be usable to parse synonyms after v7.0" );
122146 return this ;
123147 }
124- return IDENTITY_FILTER ;
125148 }
126149 };
127150 }
@@ -138,10 +161,17 @@ public TokenStream create(TokenStream tokenStream) {
138161
139162 @ Override
140163 public TokenFilterFactory getSynonymFilter () {
141- if (useFilterForParsingSynonyms ) {
164+ if (allowForSynonymParsing ) {
165+ return this ;
166+ }
167+ if (version .onOrAfter (Version .V_7_0_0 )) {
168+ throw new IllegalArgumentException ("Token filter [" + name () + "] cannot be used to parse synonyms" );
169+ }
170+ else {
171+ DEPRECATION_LOGGER .deprecatedAndMaybeLog (name (), "Token filter [" + name ()
172+ + "] will not be usable to parse synonyms after v7.0" );
142173 return this ;
143174 }
144- return IDENTITY_FILTER ;
145175 }
146176 };
147177 }
0 commit comments