diff --git a/server/src/main/java/org/elasticsearch/index/analysis/AnalysisRegistry.java b/server/src/main/java/org/elasticsearch/index/analysis/AnalysisRegistry.java index 61b1cb057fd..b0d9c778d2a 100644 --- a/server/src/main/java/org/elasticsearch/index/analysis/AnalysisRegistry.java +++ b/server/src/main/java/org/elasticsearch/index/analysis/AnalysisRegistry.java @@ -293,13 +293,13 @@ public final class AnalysisRegistry implements Closeable { T factory = null; if (typeName == null) { if (currentSettings.get("tokenizer") != null) { - factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings, environment); + factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings); } else { throw new IllegalArgumentException(component + " [" + name + "] " + "must specify either an analyzer type, or a tokenizer"); } } else if (typeName.equals("custom")) { - factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings, environment); + factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings); } if (factory != null) { factories.put(name, factory); @@ -430,8 +430,10 @@ public final class AnalysisRegistry implements Closeable { Map normalizers = new HashMap<>(); Map whitespaceNormalizers = new HashMap<>(); for (Map.Entry> entry : analyzerProviders.entrySet()) { - processAnalyzerFactory(indexSettings, entry.getKey(), entry.getValue(), analyzers, - tokenFilterFactoryFactories, charFilterFactoryFactories, tokenizerFactoryFactories); + analyzers.merge(entry.getKey(), produceAnalyzer(entry.getKey(), entry.getValue(), tokenFilterFactoryFactories, + charFilterFactoryFactories, tokenizerFactoryFactories), (k, v) -> { + throw new IllegalStateException("already registered analyzer with name: " + entry.getKey()); + }); } for (Map.Entry> entry : normalizerProviders.entrySet()) { processNormalizerFactory(entry.getKey(), entry.getValue(), normalizers, "keyword", @@ -441,9 +443,9 @@ public final class AnalysisRegistry implements Closeable { } if (!analyzers.containsKey("default")) { - processAnalyzerFactory(indexSettings, "default", new StandardAnalyzerProvider(indexSettings, null, - "default", Settings.Builder.EMPTY_SETTINGS), - analyzers, tokenFilterFactoryFactories, charFilterFactoryFactories, tokenizerFactoryFactories); + NamedAnalyzer defaultAnalyzer = produceAnalyzer("default", new StandardAnalyzerProvider(indexSettings, null, "default", + Settings.Builder.EMPTY_SETTINGS), tokenFilterFactoryFactories, charFilterFactoryFactories, tokenizerFactoryFactories); + analyzers.put("default", defaultAnalyzer); } if (!analyzers.containsKey("default_search")) { analyzers.put("default_search", analyzers.get("default")); @@ -473,11 +475,9 @@ public final class AnalysisRegistry implements Closeable { whitespaceNormalizers); } - private void processAnalyzerFactory(IndexSettings indexSettings, - String name, - AnalyzerProvider analyzerFactory, - Map analyzers, Map tokenFilters, - Map charFilters, Map tokenizers) { + private static NamedAnalyzer produceAnalyzer(String name, AnalyzerProvider analyzerFactory, + Map tokenFilters, Map charFilters, + Map tokenizers) { /* * Lucene defaults positionIncrementGap to 0 in all analyzers but * Elasticsearch defaults them to 0 only before version 2.0 @@ -511,15 +511,7 @@ public final class AnalysisRegistry implements Closeable { } else { analyzer = new NamedAnalyzer(name, analyzerFactory.scope(), analyzerF, overridePositionIncrementGap); } - if (analyzers.containsKey(name)) { - throw new IllegalStateException("already registered analyzer with name: " + name); - } - analyzers.put(name, analyzer); - // TODO: remove alias support completely when we no longer support pre 5.0 indices - final String analyzerAliasKey = "index.analysis.analyzer." + analyzerFactory.name() + ".alias"; - if (indexSettings.getSettings().get(analyzerAliasKey) != null) { - throw new IllegalArgumentException("setting [" + analyzerAliasKey + "] is not supported"); - } + return analyzer; } private void processNormalizerFactory( diff --git a/server/src/main/java/org/elasticsearch/index/analysis/CustomAnalyzerProvider.java b/server/src/main/java/org/elasticsearch/index/analysis/CustomAnalyzerProvider.java index 96fe9454f63..8080a6af876 100644 --- a/server/src/main/java/org/elasticsearch/index/analysis/CustomAnalyzerProvider.java +++ b/server/src/main/java/org/elasticsearch/index/analysis/CustomAnalyzerProvider.java @@ -20,7 +20,6 @@ package org.elasticsearch.index.analysis; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.env.Environment; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.mapper.TextFieldMapper; @@ -35,18 +34,16 @@ import java.util.Map; public class CustomAnalyzerProvider extends AbstractIndexAnalyzerProvider { private final Settings analyzerSettings; - private final Environment environment; private CustomAnalyzer customAnalyzer; public CustomAnalyzerProvider(IndexSettings indexSettings, - String name, Settings settings, Environment environment) { + String name, Settings settings) { super(indexSettings, name, settings); this.analyzerSettings = settings; - this.environment = environment; } - public void build(final Map tokenizers, final Map charFilters, + void build(final Map tokenizers, final Map charFilters, final Map tokenFilters) { String tokenizerName = analyzerSettings.get("tokenizer"); if (tokenizerName == null) { diff --git a/server/src/test/java/org/elasticsearch/indices/analysis/AnalysisModuleTests.java b/server/src/test/java/org/elasticsearch/indices/analysis/AnalysisModuleTests.java index c769da0af4d..c4cd37a91b1 100644 --- a/server/src/test/java/org/elasticsearch/indices/analysis/AnalysisModuleTests.java +++ b/server/src/test/java/org/elasticsearch/indices/analysis/AnalysisModuleTests.java @@ -131,19 +131,6 @@ public class AnalysisModuleTests extends ESTestCase { testSimpleConfiguration(settings); } - public void testAnalyzerAliasNotAllowedPost5x() throws IOException { - Settings settings = Settings.builder() - .put("index.analysis.analyzer.foobar.type", "standard") - .put("index.analysis.analyzer.foobar.alias","foobaz") - // analyzer aliases were removed in v5.0.0 alpha6 - .put(IndexMetaData.SETTING_VERSION_CREATED, VersionUtils.randomVersionBetween(random(), Version.V_6_0_0, null)) - .put(Environment.PATH_HOME_SETTING.getKey(), createTempDir().toString()) - .build(); - AnalysisRegistry registry = getNewRegistry(settings); - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> getIndexAnalyzers(registry, settings)); - assertEquals("setting [index.analysis.analyzer.foobar.alias] is not supported", e.getMessage()); - } - public void testVersionedAnalyzers() throws Exception { String yaml = "/org/elasticsearch/index/analysis/test1.yml"; Settings settings2 = Settings.builder()