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.
This commit is contained in:
parent
efe45011a5
commit
335955b874
|
@ -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<String, NamedAnalyzer> normalizers = new HashMap<>();
|
||||
Map<String, NamedAnalyzer> whitespaceNormalizers = new HashMap<>();
|
||||
for (Map.Entry<String, AnalyzerProvider<?>> 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<String, AnalyzerProvider<?>> 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<String, NamedAnalyzer> analyzers, Map<String, TokenFilterFactory> tokenFilters,
|
||||
Map<String, CharFilterFactory> charFilters, Map<String, TokenizerFactory> tokenizers) {
|
||||
private static NamedAnalyzer produceAnalyzer(String name, AnalyzerProvider<?> analyzerFactory,
|
||||
Map<String, TokenFilterFactory> tokenFilters, Map<String, CharFilterFactory> charFilters,
|
||||
Map<String, TokenizerFactory> 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(
|
||||
|
|
|
@ -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<CustomAnalyzer> {
|
||||
|
||||
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<String, TokenizerFactory> tokenizers, final Map<String, CharFilterFactory> charFilters,
|
||||
void build(final Map<String, TokenizerFactory> tokenizers, final Map<String, CharFilterFactory> charFilters,
|
||||
final Map<String, TokenFilterFactory> tokenFilters) {
|
||||
String tokenizerName = analyzerSettings.get("tokenizer");
|
||||
if (tokenizerName == null) {
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue