32
32
import org .elasticsearch .env .Environment ;
33
33
import org .elasticsearch .index .Index ;
34
34
import org .elasticsearch .index .settings .IndexSettings ;
35
+ import org .elasticsearch .indices .analysis .IndicesAnalysisService ;
35
36
36
37
import java .io .IOException ;
37
38
import java .util .ArrayList ;
@@ -43,7 +44,7 @@ public class SynonymTokenFilterFactory extends AbstractTokenFilterFactory {
43
44
44
45
private final SynonymMap synonymMap ;
45
46
46
- @ Inject public SynonymTokenFilterFactory (Index index , @ IndexSettings Settings indexSettings , Environment env , Map <String , TokenizerFactoryFactory > tokenizerFactories ,
47
+ @ Inject public SynonymTokenFilterFactory (Index index , @ IndexSettings Settings indexSettings , Environment env , IndicesAnalysisService indicesAnalysisService , Map <String , TokenizerFactoryFactory > tokenizerFactories ,
47
48
@ Assisted String name , @ Assisted Settings settings ) {
48
49
super (index , indexSettings , name , settings );
49
50
@@ -54,8 +55,16 @@ public class SynonymTokenFilterFactory extends AbstractTokenFilterFactory {
54
55
boolean ignoreCase = settings .getAsBoolean ("ignore_case" , false );
55
56
boolean expand = settings .getAsBoolean ("expand" , true );
56
57
57
- TokenizerFactoryFactory tokenizerFactoryFactory = tokenizerFactories .get (settings .get ("tokenizer" , "whitespace" ));
58
- TokenizerFactory tokenizerFactory = tokenizerFactoryFactory .create (settings .get ("tokenizer" , "whitespace" ), settings );
58
+ String tokenizerName = settings .get ("tokenizer" , "whitespace" );
59
+
60
+ TokenizerFactoryFactory tokenizerFactoryFactory = tokenizerFactories .get (tokenizerName );
61
+ if (tokenizerFactoryFactory == null ) {
62
+ tokenizerFactoryFactory = indicesAnalysisService .tokenizerFactoryFactory (tokenizerName );
63
+ }
64
+ if (tokenizerFactoryFactory == null ) {
65
+ throw new ElasticSearchIllegalArgumentException ("failed to fine tokenizer [" + tokenizerName + "] for synonym token filter" );
66
+ }
67
+ TokenizerFactory tokenizerFactory = tokenizerFactoryFactory .create (tokenizerName , settings );
59
68
synonymMap = new SynonymMap (ignoreCase );
60
69
parseRules (rules , synonymMap , "=>" , "," , expand , tokenizerFactory );
61
70
}
0 commit comments