package org.xbib.elasticsearch;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.elasticsearch.Version;
import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
import org.elasticsearch.env.Environment;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.analysis.AnalysisRegistry;
import org.elasticsearch.index.analysis.AnalyzerProvider;
import org.elasticsearch.index.analysis.CharFilterFactory;
import org.elasticsearch.index.analysis.IndexAnalyzers;
import org.elasticsearch.index.analysis.TokenFilterFactory;
import org.elasticsearch.index.analysis.TokenizerFactory;
import org.elasticsearch.index.mapper.DocumentMapperParser;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.similarity.SimilarityService;
import org.elasticsearch.indices.IndicesModule;
import org.elasticsearch.indices.analysis.AnalysisModule;
import org.elasticsearch.indices.mapper.MapperRegistry;
import org.xbib.elasticsearch.plugin.bundle.BundlePlugin;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import static org.junit.Assert.assertNotNull;
/**
*
*/
public class MapperTestUtils {
private static final Logger logger = LogManager.getLogger(MapperTestUtils.class.getName());
public static AnalysisRegistry analysisService(Settings customSettings) throws IOException {
Settings settings = Settings.builder()
.put("path.home", System.getProperty("path.home", "/tmp"))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put(customSettings)
.build();
Environment environment = new Environment(settings);
BundlePlugin bundlePlugin = new BundlePlugin(settings);
AnalysisModule analysisModule = new AnalysisModule(environment, Collections.singletonList(bundlePlugin));
return analysisModule.getAnalysisRegistry();
}
public static DocumentMapperParser newDocumentMapperParser(String index) throws IOException {
return newDocumentMapperParser(Settings.EMPTY, index);
}
public static DocumentMapperParser newDocumentMapperParser(Settings customSettings, String index) throws IOException {
Settings settings = Settings.builder()
.put("path.home", System.getProperty("path.home", "/tmp"))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put(customSettings)
.build();
Environment environment = new Environment(settings);
BundlePlugin bundlePlugin = new BundlePlugin(settings);
AnalysisModule analysisModule = new AnalysisModule(environment, Collections.singletonList(bundlePlugin));
IndicesModule indicesModule = new IndicesModule(Collections.singletonList(bundlePlugin));
MapperRegistry mapperRegistry = indicesModule.getMapperRegistry();
AnalysisRegistry analysisRegistry = analysisModule.getAnalysisRegistry();
IndexMetaData indexMetaData = IndexMetaData.builder(index)
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
SimilarityService similarityService = new SimilarityService(indexSettings, SimilarityService.BUILT_IN);
Map<String, CharFilterFactory> charFilterFactoryMap = analysisRegistry.buildCharFilterFactories(indexSettings);
Map<String, TokenFilterFactory> tokenFilterFactoryMap = analysisRegistry.buildTokenFilterFactories(indexSettings);
Map<String, TokenizerFactory> tokenizerFactoryMap = analysisRegistry.buildTokenizerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> analyzerProviderMap = analysisRegistry.buildAnalyzerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> normalizerProviderMap = analysisRegistry.buildNormalizerFactories(indexSettings);
IndexAnalyzers indexAnalyzers = analysisRegistry.build(indexSettings,
analyzerProviderMap,
normalizerProviderMap,
tokenizerFactoryMap,
charFilterFactoryMap,
tokenFilterFactoryMap);
MapperService mapperService = new MapperService(indexSettings, indexAnalyzers, NamedXContentRegistry.EMPTY,
similarityService, mapperRegistry, null);
return new DocumentMapperParser(indexSettings, mapperService, indexAnalyzers, NamedXContentRegistry.EMPTY,
similarityService, mapperRegistry, null);
}
public static Analyzer analyzer(String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home"))
.build();
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, CharFilterFactory> charFilterFactoryMap = analysisRegistry.buildCharFilterFactories(indexSettings);
Map<String, TokenFilterFactory> tokenFilterFactoryMap = analysisRegistry.buildTokenFilterFactories(indexSettings);
Map<String, TokenizerFactory> tokenizerFactoryMap = analysisRegistry.buildTokenizerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> analyzerProviderMap = analysisRegistry.buildAnalyzerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> normalizerProviderMap = analysisRegistry.buildNormalizerFactories(indexSettings);
IndexAnalyzers indexAnalyzers = analysisRegistry.build(indexSettings, analyzerProviderMap, normalizerProviderMap,
tokenizerFactoryMap, charFilterFactoryMap, tokenFilterFactoryMap);
Analyzer analyzer = indexAnalyzers.get(name) != null ? indexAnalyzers.get(name) : analysisRegistry.getAnalyzer(name);
assertNotNull(analyzer);
return analyzer;
}
public static Analyzer analyzer(Settings customSettings, String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.put(customSettings)
.build();
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, CharFilterFactory> charFilterFactoryMap = analysisRegistry.buildCharFilterFactories(indexSettings);
Map<String, TokenFilterFactory> tokenFilterFactoryMap = analysisRegistry.buildTokenFilterFactories(indexSettings);
Map<String, TokenizerFactory> tokenizerFactoryMap = analysisRegistry.buildTokenizerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> analyzerProviderMap = analysisRegistry.buildAnalyzerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> normalizerProviderMap = analysisRegistry.buildNormalizerFactories(indexSettings);
IndexAnalyzers indexAnalyzers = analysisRegistry.build(indexSettings, analyzerProviderMap, normalizerProviderMap,
tokenizerFactoryMap, charFilterFactoryMap, tokenFilterFactoryMap);
Analyzer analyzer = indexAnalyzers.get(name) != null ? indexAnalyzers.get(name) : analysisRegistry.getAnalyzer(name);
assertNotNull(analyzer);
return analyzer;
}
public static Analyzer analyzer(String resource, String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.loadFromStream(resource, MapperTestUtils.class.getClassLoader().getResource(resource).openStream())
.build();
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, CharFilterFactory> charFilterFactoryMap = analysisRegistry.buildCharFilterFactories(indexSettings);
Map<String, TokenFilterFactory> tokenFilterFactoryMap = analysisRegistry.buildTokenFilterFactories(indexSettings);
Map<String, TokenizerFactory> tokenizerFactoryMap = analysisRegistry.buildTokenizerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> analyzerProviderMap = analysisRegistry.buildAnalyzerFactories(indexSettings);
Map<String, AnalyzerProvider<?>> normalizerProviderMap = analysisRegistry.buildNormalizerFactories(indexSettings);
IndexAnalyzers indexAnalyzers = analysisRegistry.build(indexSettings, analyzerProviderMap, normalizerProviderMap,
tokenizerFactoryMap, charFilterFactoryMap, tokenFilterFactoryMap);
Analyzer analyzer = indexAnalyzers.get(name) != null ? indexAnalyzers.get(name) : analysisRegistry.getAnalyzer(name);
assertNotNull(analyzer);
return analyzer;
}
public static TokenizerFactory tokenizerFactory(String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.build();
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, TokenizerFactory> map = analysisRegistry.buildTokenizerFactories(indexSettings);
TokenizerFactory tokenizerFactory = map.containsKey(name) ? map.get(name) :
analysisRegistry.getTokenizerProvider(name).get(new Environment(settings), name);
assertNotNull(tokenizerFactory);
return tokenizerFactory;
}
public static TokenizerFactory tokenizerFactory(String resource, String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home"))
.loadFromStream(resource, MapperTestUtils.class.getClassLoader().getResource(resource).openStream())
.build();
Environment environment = new Environment(settings);
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, TokenizerFactory> map = analysisRegistry.buildTokenizerFactories(indexSettings);
TokenizerFactory tokenizerFactory = map.containsKey(name) ? map.get(name) :
analysisRegistry.getTokenizerProvider(name).get(environment, name);
assertNotNull(tokenizerFactory);
return tokenizerFactory;
}
public static TokenFilterFactory tokenFilterFactory(String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.build();
Environment environment = new Environment(settings);
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, TokenFilterFactory> map = analysisRegistry.buildTokenFilterFactories(indexSettings);
return map.containsKey(name) ? map.get(name) :
analysisRegistry.getTokenFilterProvider(name).get(environment, name);
}
public static TokenFilterFactory tokenFilterFactory(String resource, String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.loadFromStream(resource, MapperTestUtils.class.getClassLoader().getResource(resource).openStream())
.build();
Environment environment = new Environment(settings);
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, TokenFilterFactory> map = analysisRegistry.buildTokenFilterFactories(indexSettings);
return map.containsKey(name) ? map.get(name) :
analysisRegistry.getTokenFilterProvider(name).get(environment, name);
}
public static CharFilterFactory charFilterFactory(String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.build();
Environment environment = new Environment(settings);
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, CharFilterFactory> map = analysisRegistry.buildCharFilterFactories(indexSettings);
return map.containsKey(name) ? map.get(name) :
analysisRegistry.getCharFilterProvider(name).get(environment, name);
}
public static CharFilterFactory charFilterFactory(String resource, String name) throws IOException {
Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", System.getProperty("path.home", "/tmp"))
.loadFromStream(resource, MapperTestUtils.class.getClassLoader().getResource(resource).openStream())
.build();
Environment environment = new Environment(settings);
AnalysisRegistry analysisRegistry = analysisService(settings);
IndexMetaData indexMetaData = IndexMetaData.builder("test")
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(1)
.build();
IndexSettings indexSettings = new IndexSettings(indexMetaData, settings);
Map<String, CharFilterFactory> map = analysisRegistry.buildCharFilterFactories(indexSettings);
return map.containsKey(name) ? map.get(name) :
analysisRegistry.getCharFilterProvider(name).get(environment, name);
}
}