
org.molgenis.elasticsearch.factory.EmbeddedElasticSearchServiceFactory Maven / Gradle / Ivy
package org.molgenis.elasticsearch.factory;
import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
import java.io.Closeable;
import java.io.IOException;
import java.util.Map;
import org.apache.log4j.Logger;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.ImmutableSettings.Builder;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.Node;
import org.molgenis.elasticsearch.ElasticSearchService;
/**
* Factory for creating an embedded ElasticSearch server service. An elastic search config file named
* 'elasticsearch.yml' must be on the classpath
*
* @author erwin
*
*/
public class EmbeddedElasticSearchServiceFactory implements Closeable
{
private static final Logger LOG = Logger.getLogger(EmbeddedElasticSearchServiceFactory.class);
private static final String CONFIG_FILE_NAME = "elasticsearch.yml";
private static final String DEFAULT_INDEX_NAME = "molgenis";
private final Client client;
private final Node node;
private final String indexName;
public EmbeddedElasticSearchServiceFactory()
{
this(DEFAULT_INDEX_NAME);
}
/**
* Create an embedded ElasticSearch server service using 'elasticsearch.yml' and provided settings. The provided
* settings override settings specified in 'elasticsearch.yml'
*
* @param providedSettings
*/
public EmbeddedElasticSearchServiceFactory(Map providedSettings)
{
this(DEFAULT_INDEX_NAME, providedSettings);
}
public EmbeddedElasticSearchServiceFactory(String indexName)
{
this(indexName, null);
}
/**
* Create an embedded ElasticSearch server service with the given index name using 'elasticsearch.yml' and provided
* settings. The provided settings override settings specified in 'elasticsearch.yml'
*
* @param indexName
* @param providedSettings
*/
public EmbeddedElasticSearchServiceFactory(String indexName, Map providedSettings)
{
this.indexName = indexName;
Builder builder = ImmutableSettings.settingsBuilder().loadFromClasspath(CONFIG_FILE_NAME);
if (providedSettings != null) builder.put(providedSettings);
Settings settings = builder.build();
node = nodeBuilder().settings(settings).local(true).node();
client = node.client();
LOG.info("Embedded elasticsearch server started, data path=[" + settings.get("path.data") + "]");
}
public ElasticSearchService create()
{
return new ElasticSearchService(client, indexName);
}
@Override
public void close() throws IOException
{
try
{
client.close();
}
catch (Exception e)
{
LOG.error("Error closing client", e);
}
try
{
node.close();
}
catch (Exception e)
{
LOG.error("Error closing node", e);
}
LOG.info("Elastic search server stopped");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy