19
19
20
20
package org .elasticsearch .index .analysis ;
21
21
22
+ import org .apache .logging .log4j .LogManager ;
22
23
import org .apache .lucene .analysis .TokenFilter ;
23
24
import org .apache .lucene .analysis .TokenStream ;
24
25
import org .elasticsearch .Version ;
26
+ import org .elasticsearch .common .logging .DeprecationLogger ;
25
27
import org .elasticsearch .indices .analysis .PreBuiltCacheFactory ;
26
28
import org .elasticsearch .indices .analysis .PreBuiltCacheFactory .CachingStrategy ;
27
29
32
34
* Provides pre-configured, shared {@link TokenFilter}s.
33
35
*/
34
36
public final class PreConfiguredTokenFilter extends PreConfiguredAnalysisComponent <TokenFilterFactory > {
37
+
38
+ private static final DeprecationLogger DEPRECATION_LOGGER
39
+ = new DeprecationLogger (LogManager .getLogger (PreConfiguredTokenFilter .class ));
40
+
35
41
/**
36
42
* Create a pre-configured token filter that may not vary at all.
37
43
*/
38
44
public static PreConfiguredTokenFilter singleton (String name , boolean useFilterForMultitermQueries ,
39
45
Function <TokenStream , TokenStream > create ) {
40
- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , false , CachingStrategy .ONE ,
46
+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , true , CachingStrategy .ONE ,
41
47
(tokenStream , version ) -> create .apply (tokenStream ));
42
48
}
43
49
44
50
/**
45
51
* Create a pre-configured token filter that may not vary at all.
46
52
*/
47
53
public static PreConfiguredTokenFilter singleton (String name , boolean useFilterForMultitermQueries ,
48
- boolean useFilterForParsingSynonyms ,
54
+ boolean allowForSynonymParsing ,
49
55
Function <TokenStream , TokenStream > create ) {
50
- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , useFilterForParsingSynonyms , CachingStrategy .ONE ,
56
+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , allowForSynonymParsing , CachingStrategy .ONE ,
51
57
(tokenStream , version ) -> create .apply (tokenStream ));
52
58
}
53
59
54
60
/**
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 .
56
62
*/
57
63
public static PreConfiguredTokenFilter singletonWithVersion (String name , boolean useFilterForMultitermQueries ,
58
64
BiFunction <TokenStream , Version , TokenStream > create ) {
59
- return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , false , CachingStrategy .ONE ,
65
+ return new PreConfiguredTokenFilter (name , useFilterForMultitermQueries , true , CachingStrategy .ONE ,
60
66
(tokenStream , version ) -> create .apply (tokenStream , version ));
61
67
}
62
68
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
+
63
79
/**
64
80
* Create a pre-configured token filter that may vary based on the Lucene version.
65
81
*/
66
82
public static PreConfiguredTokenFilter luceneVersion (String name , boolean useFilterForMultitermQueries ,
67
83
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 ,
69
85
(tokenStream , version ) -> create .apply (tokenStream , version .luceneVersion ));
70
86
}
71
87
@@ -74,18 +90,18 @@ public static PreConfiguredTokenFilter luceneVersion(String name, boolean useFil
74
90
*/
75
91
public static PreConfiguredTokenFilter elasticsearchVersion (String name , boolean useFilterForMultitermQueries ,
76
92
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 );
78
94
}
79
95
80
96
private final boolean useFilterForMultitermQueries ;
81
- private final boolean useFilterForParsingSynonyms ;
97
+ private final boolean allowForSynonymParsing ;
82
98
private final BiFunction <TokenStream , Version , TokenStream > create ;
83
99
84
- private PreConfiguredTokenFilter (String name , boolean useFilterForMultitermQueries , boolean useFilterForParsingSynonyms ,
100
+ private PreConfiguredTokenFilter (String name , boolean useFilterForMultitermQueries , boolean allowForSynonymParsing ,
85
101
PreBuiltCacheFactory .CachingStrategy cache , BiFunction <TokenStream , Version , TokenStream > create ) {
86
102
super (name , cache );
87
103
this .useFilterForMultitermQueries = useFilterForMultitermQueries ;
88
- this .useFilterForParsingSynonyms = useFilterForParsingSynonyms ;
104
+ this .allowForSynonymParsing = allowForSynonymParsing ;
89
105
this .create = create ;
90
106
}
91
107
@@ -118,10 +134,17 @@ public TokenStream create(TokenStream tokenStream) {
118
134
119
135
@ Override
120
136
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" );
122
146
return this ;
123
147
}
124
- return IDENTITY_FILTER ;
125
148
}
126
149
};
127
150
}
@@ -138,10 +161,17 @@ public TokenStream create(TokenStream tokenStream) {
138
161
139
162
@ Override
140
163
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" );
142
173
return this ;
143
174
}
144
- return IDENTITY_FILTER ;
145
175
}
146
176
};
147
177
}
0 commit comments