Skip to content

Commit 335955b

Browse files
author
Christoph Büscher
committed
Some internal refactorings in AnalysisRegistry (#40609)
Reducing some methods scope and marking them as static where possible. Removing "alias" support from AnalysisRegistry#produceAnalyze and changing that method to return a NamedAnalyzer instead of having a side effect on the analyzer map passed in. Also, CustomAnalyzerProvider doesn't seem to need the `environment` field.
1 parent efe4501 commit 335955b

File tree

3 files changed

+15
-39
lines changed

3 files changed

+15
-39
lines changed

server/src/main/java/org/elasticsearch/index/analysis/AnalysisRegistry.java

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -293,13 +293,13 @@ private <T> Map<String, T> buildMapping(Component component, IndexSettings setti
293293
T factory = null;
294294
if (typeName == null) {
295295
if (currentSettings.get("tokenizer") != null) {
296-
factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings, environment);
296+
factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings);
297297
} else {
298298
throw new IllegalArgumentException(component + " [" + name + "] " +
299299
"must specify either an analyzer type, or a tokenizer");
300300
}
301301
} else if (typeName.equals("custom")) {
302-
factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings, environment);
302+
factory = (T) new CustomAnalyzerProvider(settings, name, currentSettings);
303303
}
304304
if (factory != null) {
305305
factories.put(name, factory);
@@ -430,8 +430,10 @@ public IndexAnalyzers build(IndexSettings indexSettings,
430430
Map<String, NamedAnalyzer> normalizers = new HashMap<>();
431431
Map<String, NamedAnalyzer> whitespaceNormalizers = new HashMap<>();
432432
for (Map.Entry<String, AnalyzerProvider<?>> entry : analyzerProviders.entrySet()) {
433-
processAnalyzerFactory(indexSettings, entry.getKey(), entry.getValue(), analyzers,
434-
tokenFilterFactoryFactories, charFilterFactoryFactories, tokenizerFactoryFactories);
433+
analyzers.merge(entry.getKey(), produceAnalyzer(entry.getKey(), entry.getValue(), tokenFilterFactoryFactories,
434+
charFilterFactoryFactories, tokenizerFactoryFactories), (k, v) -> {
435+
throw new IllegalStateException("already registered analyzer with name: " + entry.getKey());
436+
});
435437
}
436438
for (Map.Entry<String, AnalyzerProvider<?>> entry : normalizerProviders.entrySet()) {
437439
processNormalizerFactory(entry.getKey(), entry.getValue(), normalizers, "keyword",
@@ -441,9 +443,9 @@ public IndexAnalyzers build(IndexSettings indexSettings,
441443
}
442444

443445
if (!analyzers.containsKey("default")) {
444-
processAnalyzerFactory(indexSettings, "default", new StandardAnalyzerProvider(indexSettings, null,
445-
"default", Settings.Builder.EMPTY_SETTINGS),
446-
analyzers, tokenFilterFactoryFactories, charFilterFactoryFactories, tokenizerFactoryFactories);
446+
NamedAnalyzer defaultAnalyzer = produceAnalyzer("default", new StandardAnalyzerProvider(indexSettings, null, "default",
447+
Settings.Builder.EMPTY_SETTINGS), tokenFilterFactoryFactories, charFilterFactoryFactories, tokenizerFactoryFactories);
448+
analyzers.put("default", defaultAnalyzer);
447449
}
448450
if (!analyzers.containsKey("default_search")) {
449451
analyzers.put("default_search", analyzers.get("default"));
@@ -473,11 +475,9 @@ public IndexAnalyzers build(IndexSettings indexSettings,
473475
whitespaceNormalizers);
474476
}
475477

476-
private void processAnalyzerFactory(IndexSettings indexSettings,
477-
String name,
478-
AnalyzerProvider<?> analyzerFactory,
479-
Map<String, NamedAnalyzer> analyzers, Map<String, TokenFilterFactory> tokenFilters,
480-
Map<String, CharFilterFactory> charFilters, Map<String, TokenizerFactory> tokenizers) {
478+
private static NamedAnalyzer produceAnalyzer(String name, AnalyzerProvider<?> analyzerFactory,
479+
Map<String, TokenFilterFactory> tokenFilters, Map<String, CharFilterFactory> charFilters,
480+
Map<String, TokenizerFactory> tokenizers) {
481481
/*
482482
* Lucene defaults positionIncrementGap to 0 in all analyzers but
483483
* Elasticsearch defaults them to 0 only before version 2.0
@@ -511,15 +511,7 @@ private void processAnalyzerFactory(IndexSettings indexSettings,
511511
} else {
512512
analyzer = new NamedAnalyzer(name, analyzerFactory.scope(), analyzerF, overridePositionIncrementGap);
513513
}
514-
if (analyzers.containsKey(name)) {
515-
throw new IllegalStateException("already registered analyzer with name: " + name);
516-
}
517-
analyzers.put(name, analyzer);
518-
// TODO: remove alias support completely when we no longer support pre 5.0 indices
519-
final String analyzerAliasKey = "index.analysis.analyzer." + analyzerFactory.name() + ".alias";
520-
if (indexSettings.getSettings().get(analyzerAliasKey) != null) {
521-
throw new IllegalArgumentException("setting [" + analyzerAliasKey + "] is not supported");
522-
}
514+
return analyzer;
523515
}
524516

525517
private void processNormalizerFactory(

server/src/main/java/org/elasticsearch/index/analysis/CustomAnalyzerProvider.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.analysis;
2121

2222
import org.elasticsearch.common.settings.Settings;
23-
import org.elasticsearch.env.Environment;
2423
import org.elasticsearch.index.IndexSettings;
2524
import org.elasticsearch.index.mapper.TextFieldMapper;
2625

@@ -35,18 +34,16 @@
3534
public class CustomAnalyzerProvider extends AbstractIndexAnalyzerProvider<CustomAnalyzer> {
3635

3736
private final Settings analyzerSettings;
38-
private final Environment environment;
3937

4038
private CustomAnalyzer customAnalyzer;
4139

4240
public CustomAnalyzerProvider(IndexSettings indexSettings,
43-
String name, Settings settings, Environment environment) {
41+
String name, Settings settings) {
4442
super(indexSettings, name, settings);
4543
this.analyzerSettings = settings;
46-
this.environment = environment;
4744
}
4845

49-
public void build(final Map<String, TokenizerFactory> tokenizers, final Map<String, CharFilterFactory> charFilters,
46+
void build(final Map<String, TokenizerFactory> tokenizers, final Map<String, CharFilterFactory> charFilters,
5047
final Map<String, TokenFilterFactory> tokenFilters) {
5148
String tokenizerName = analyzerSettings.get("tokenizer");
5249
if (tokenizerName == null) {

server/src/test/java/org/elasticsearch/indices/analysis/AnalysisModuleTests.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,19 +131,6 @@ public void testSimpleConfigurationYaml() throws IOException {
131131
testSimpleConfiguration(settings);
132132
}
133133

134-
public void testAnalyzerAliasNotAllowedPost5x() throws IOException {
135-
Settings settings = Settings.builder()
136-
.put("index.analysis.analyzer.foobar.type", "standard")
137-
.put("index.analysis.analyzer.foobar.alias","foobaz")
138-
// analyzer aliases were removed in v5.0.0 alpha6
139-
.put(IndexMetaData.SETTING_VERSION_CREATED, VersionUtils.randomVersionBetween(random(), Version.V_6_0_0, null))
140-
.put(Environment.PATH_HOME_SETTING.getKey(), createTempDir().toString())
141-
.build();
142-
AnalysisRegistry registry = getNewRegistry(settings);
143-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> getIndexAnalyzers(registry, settings));
144-
assertEquals("setting [index.analysis.analyzer.foobar.alias] is not supported", e.getMessage());
145-
}
146-
147134
public void testVersionedAnalyzers() throws Exception {
148135
String yaml = "/org/elasticsearch/index/analysis/test1.yml";
149136
Settings settings2 = Settings.builder()

0 commit comments

Comments
 (0)