|
@@ -49,6 +49,7 @@ import org.elasticsearch.index.IndexSettings;
|
|
|
import org.elasticsearch.index.analysis.AnalysisRegistry;
|
|
|
import org.elasticsearch.index.analysis.CharFilterFactory;
|
|
|
import org.elasticsearch.index.analysis.CustomAnalyzer;
|
|
|
+import org.elasticsearch.index.analysis.CustomAnalyzerProvider;
|
|
|
import org.elasticsearch.index.analysis.IndexAnalyzers;
|
|
|
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
|
|
import org.elasticsearch.index.analysis.TokenFilterFactory;
|
|
@@ -183,13 +184,14 @@ public class TransportAnalyzeAction extends TransportSingleShardAction<AnalyzeRe
|
|
|
Tuple<String, TokenizerFactory> tokenizerFactory = parseTokenizerFactory(request, indexAnalyzers,
|
|
|
analysisRegistry, environment);
|
|
|
|
|
|
- TokenFilterFactory[] tokenFilterFactories = new TokenFilterFactory[0];
|
|
|
- tokenFilterFactories = getTokenFilterFactories(request, indexSettings, analysisRegistry, environment, tokenFilterFactories);
|
|
|
+ List<CharFilterFactory> charFilterFactoryList = parseCharFilterFactories(request, indexSettings, analysisRegistry, environment);
|
|
|
|
|
|
- CharFilterFactory[] charFilterFactories = new CharFilterFactory[0];
|
|
|
- charFilterFactories = getCharFilterFactories(request, indexSettings, analysisRegistry, environment, charFilterFactories);
|
|
|
+ List<TokenFilterFactory> tokenFilterFactoryList = parseTokenFilterFactories(request, indexSettings, analysisRegistry,
|
|
|
+ environment, tokenizerFactory, charFilterFactoryList);
|
|
|
|
|
|
- analyzer = new CustomAnalyzer(tokenizerFactory.v1(), tokenizerFactory.v2(), charFilterFactories, tokenFilterFactories);
|
|
|
+ analyzer = new CustomAnalyzer(tokenizerFactory.v1(), tokenizerFactory.v2(),
|
|
|
+ charFilterFactoryList.toArray(new CharFilterFactory[charFilterFactoryList.size()]),
|
|
|
+ tokenFilterFactoryList.toArray(new TokenFilterFactory[tokenFilterFactoryList.size()]));
|
|
|
closeAnalyzer = true;
|
|
|
} else if (analyzer == null) {
|
|
|
if (indexAnalyzers == null) {
|
|
@@ -462,12 +464,13 @@ public class TransportAnalyzeAction extends TransportSingleShardAction<AnalyzeRe
|
|
|
return extendedAttributes;
|
|
|
}
|
|
|
|
|
|
- private static CharFilterFactory[] getCharFilterFactories(AnalyzeRequest request, IndexSettings indexSettings, AnalysisRegistry analysisRegistry,
|
|
|
- Environment environment, CharFilterFactory[] charFilterFactories) throws IOException {
|
|
|
+ private static List<CharFilterFactory> parseCharFilterFactories(AnalyzeRequest request, IndexSettings indexSettings, AnalysisRegistry analysisRegistry,
|
|
|
+ Environment environment) throws IOException {
|
|
|
+ List<CharFilterFactory> charFilterFactoryList = new ArrayList<>();
|
|
|
if (request.charFilters() != null && request.charFilters().size() > 0) {
|
|
|
- charFilterFactories = new CharFilterFactory[request.charFilters().size()];
|
|
|
- for (int i = 0; i < request.charFilters().size(); i++) {
|
|
|
- final AnalyzeRequest.NameOrDefinition charFilter = request.charFilters().get(i);
|
|
|
+ List<AnalyzeRequest.NameOrDefinition> charFilters = request.charFilters();
|
|
|
+ for (AnalyzeRequest.NameOrDefinition charFilter : charFilters) {
|
|
|
+ CharFilterFactory charFilterFactory;
|
|
|
// parse anonymous settings
|
|
|
if (charFilter.definition != null) {
|
|
|
Settings settings = getAnonymousSettings(charFilter.definition);
|
|
@@ -481,7 +484,7 @@ public class TransportAnalyzeAction extends TransportSingleShardAction<AnalyzeRe
|
|
|
throw new IllegalArgumentException("failed to find global char filter under [" + charFilterTypeName + "]");
|
|
|
}
|
|
|
// Need to set anonymous "name" of char_filter
|
|
|
- charFilterFactories[i] = charFilterFactoryFactory.get(getNaIndexSettings(settings), environment, "_anonymous_charfilter_[" + i + "]", settings);
|
|
|
+ charFilterFactory = charFilterFactoryFactory.get(getNaIndexSettings(settings), environment, "_anonymous_charfilter", settings);
|
|
|
} else {
|
|
|
AnalysisModule.AnalysisProvider<CharFilterFactory> charFilterFactoryFactory;
|
|
|
if (indexSettings == null) {
|
|
@@ -489,31 +492,34 @@ public class TransportAnalyzeAction extends TransportSingleShardAction<AnalyzeRe
|
|
|
if (charFilterFactoryFactory == null) {
|
|
|
throw new IllegalArgumentException("failed to find global char filter under [" + charFilter.name + "]");
|
|
|
}
|
|
|
- charFilterFactories[i] = charFilterFactoryFactory.get(environment, charFilter.name);
|
|
|
+ charFilterFactory = charFilterFactoryFactory.get(environment, charFilter.name);
|
|
|
} else {
|
|
|
charFilterFactoryFactory = analysisRegistry.getCharFilterProvider(charFilter.name, indexSettings);
|
|
|
if (charFilterFactoryFactory == null) {
|
|
|
throw new IllegalArgumentException("failed to find char filter under [" + charFilter.name + "]");
|
|
|
}
|
|
|
- charFilterFactories[i] = charFilterFactoryFactory.get(indexSettings, environment, charFilter.name,
|
|
|
+ charFilterFactory = charFilterFactoryFactory.get(indexSettings, environment, charFilter.name,
|
|
|
AnalysisRegistry.getSettingsFromIndexSettings(indexSettings,
|
|
|
AnalysisRegistry.INDEX_ANALYSIS_CHAR_FILTER + "." + charFilter.name));
|
|
|
}
|
|
|
}
|
|
|
- if (charFilterFactories[i] == null) {
|
|
|
+ if (charFilterFactory == null) {
|
|
|
throw new IllegalArgumentException("failed to find char filter under [" + charFilter.name + "]");
|
|
|
}
|
|
|
+ charFilterFactoryList.add(charFilterFactory);
|
|
|
}
|
|
|
}
|
|
|
- return charFilterFactories;
|
|
|
+ return charFilterFactoryList;
|
|
|
}
|
|
|
|
|
|
- private static TokenFilterFactory[] getTokenFilterFactories(AnalyzeRequest request, IndexSettings indexSettings, AnalysisRegistry analysisRegistry,
|
|
|
- Environment environment, TokenFilterFactory[] tokenFilterFactories) throws IOException {
|
|
|
+ private static List<TokenFilterFactory> parseTokenFilterFactories(AnalyzeRequest request, IndexSettings indexSettings, AnalysisRegistry analysisRegistry,
|
|
|
+ Environment environment, Tuple<String, TokenizerFactory> tokenizerFactory,
|
|
|
+ List<CharFilterFactory> charFilterFactoryList) throws IOException {
|
|
|
+ List<TokenFilterFactory> tokenFilterFactoryList = new ArrayList<>();
|
|
|
if (request.tokenFilters() != null && request.tokenFilters().size() > 0) {
|
|
|
- tokenFilterFactories = new TokenFilterFactory[request.tokenFilters().size()];
|
|
|
- for (int i = 0; i < request.tokenFilters().size(); i++) {
|
|
|
- final AnalyzeRequest.NameOrDefinition tokenFilter = request.tokenFilters().get(i);
|
|
|
+ List<AnalyzeRequest.NameOrDefinition> tokenFilters = request.tokenFilters();
|
|
|
+ for (AnalyzeRequest.NameOrDefinition tokenFilter : tokenFilters) {
|
|
|
+ TokenFilterFactory tokenFilterFactory;
|
|
|
// parse anonymous settings
|
|
|
if (tokenFilter.definition != null) {
|
|
|
Settings settings = getAnonymousSettings(tokenFilter.definition);
|
|
@@ -527,7 +533,11 @@ public class TransportAnalyzeAction extends TransportSingleShardAction<AnalyzeRe
|
|
|
throw new IllegalArgumentException("failed to find global token filter under [" + filterTypeName + "]");
|
|
|
}
|
|
|
// Need to set anonymous "name" of tokenfilter
|
|
|
- tokenFilterFactories[i] = tokenFilterFactoryFactory.get(getNaIndexSettings(settings), environment, "_anonymous_tokenfilter_[" + i + "]", settings);
|
|
|
+ tokenFilterFactory = tokenFilterFactoryFactory.get(getNaIndexSettings(settings), environment, "_anonymous_tokenfilter", settings);
|
|
|
+ tokenFilterFactory = CustomAnalyzerProvider.checkAndApplySynonymFilter(tokenFilterFactory, tokenizerFactory.v1(), tokenizerFactory.v2(), tokenFilterFactoryList,
|
|
|
+ charFilterFactoryList, environment);
|
|
|
+
|
|
|
+
|
|
|
} else {
|
|
|
AnalysisModule.AnalysisProvider<TokenFilterFactory> tokenFilterFactoryFactory;
|
|
|
if (indexSettings == null) {
|
|
@@ -535,23 +545,26 @@ public class TransportAnalyzeAction extends TransportSingleShardAction<AnalyzeRe
|
|
|
if (tokenFilterFactoryFactory == null) {
|
|
|
throw new IllegalArgumentException("failed to find global token filter under [" + tokenFilter.name + "]");
|
|
|
}
|
|
|
- tokenFilterFactories[i] = tokenFilterFactoryFactory.get(environment, tokenFilter.name);
|
|
|
+ tokenFilterFactory = tokenFilterFactoryFactory.get(environment, tokenFilter.name);
|
|
|
} else {
|
|
|
tokenFilterFactoryFactory = analysisRegistry.getTokenFilterProvider(tokenFilter.name, indexSettings);
|
|
|
- if (tokenFilterFactoryFactory == null) {
|
|
|
+ if (tokenFilterFactoryFactory == null) {
|
|
|
throw new IllegalArgumentException("failed to find token filter under [" + tokenFilter.name + "]");
|
|
|
}
|
|
|
- tokenFilterFactories[i] = tokenFilterFactoryFactory.get(indexSettings, environment, tokenFilter.name,
|
|
|
- AnalysisRegistry.getSettingsFromIndexSettings(indexSettings,
|
|
|
- AnalysisRegistry.INDEX_ANALYSIS_FILTER + "." + tokenFilter.name));
|
|
|
+ Settings settings = AnalysisRegistry.getSettingsFromIndexSettings(indexSettings,
|
|
|
+ AnalysisRegistry.INDEX_ANALYSIS_FILTER + "." + tokenFilter.name);
|
|
|
+ tokenFilterFactory = tokenFilterFactoryFactory.get(indexSettings, environment, tokenFilter.name, settings);
|
|
|
+ tokenFilterFactory = CustomAnalyzerProvider.checkAndApplySynonymFilter(tokenFilterFactory, tokenizerFactory.v1(), tokenizerFactory.v2(), tokenFilterFactoryList,
|
|
|
+ charFilterFactoryList, environment);
|
|
|
}
|
|
|
}
|
|
|
- if (tokenFilterFactories[i] == null) {
|
|
|
+ if (tokenFilterFactory == null) {
|
|
|
throw new IllegalArgumentException("failed to find or create token filter under [" + tokenFilter.name + "]");
|
|
|
}
|
|
|
+ tokenFilterFactoryList.add(tokenFilterFactory);
|
|
|
}
|
|
|
}
|
|
|
- return tokenFilterFactories;
|
|
|
+ return tokenFilterFactoryList;
|
|
|
}
|
|
|
|
|
|
private static Tuple<String, TokenizerFactory> parseTokenizerFactory(AnalyzeRequest request, IndexAnalyzers indexAnalzyers,
|