Skip to content

Commit b7d492a

Browse files
committed
fix synonym filter problem due to refactoring done in analysis components regestrations
1 parent cc39eb7 commit b7d492a

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/analysis/SynonymTokenFilterFactory.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.elasticsearch.env.Environment;
3333
import org.elasticsearch.index.Index;
3434
import org.elasticsearch.index.settings.IndexSettings;
35+
import org.elasticsearch.indices.analysis.IndicesAnalysisService;
3536

3637
import java.io.IOException;
3738
import java.util.ArrayList;
@@ -43,7 +44,7 @@ public class SynonymTokenFilterFactory extends AbstractTokenFilterFactory {
4344

4445
private final SynonymMap synonymMap;
4546

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,
4748
@Assisted String name, @Assisted Settings settings) {
4849
super(index, indexSettings, name, settings);
4950

@@ -54,8 +55,16 @@ public class SynonymTokenFilterFactory extends AbstractTokenFilterFactory {
5455
boolean ignoreCase = settings.getAsBoolean("ignore_case", false);
5556
boolean expand = settings.getAsBoolean("expand", true);
5657

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);
5968
synonymMap = new SynonymMap(ignoreCase);
6069
parseRules(rules, synonymMap, "=>", ",", expand, tokenizerFactory);
6170
}

0 commit comments

Comments
 (0)