org.hibernate.search.backend.elasticsearch.cfg.ElasticsearchBackendSettings Maven / Gradle / Ivy
/*
 * Hibernate Search, full-text search for your domain model
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.search.backend.elasticsearch.cfg;
import java.util.Collections;
import java.util.List;
import org.hibernate.search.backend.elasticsearch.ElasticsearchVersion;
import org.hibernate.search.backend.elasticsearch.analysis.ElasticsearchAnalysisConfigurer;
import org.hibernate.search.backend.elasticsearch.index.layout.IndexLayoutStrategy;
import org.hibernate.search.backend.elasticsearch.mapping.TypeNameMappingStrategyName;
import org.hibernate.search.backend.elasticsearch.multitenancy.MultiTenancyStrategyName;
/**
 * Configuration properties for Elasticsearch backends.
 * 
 * Constants in this class are to be appended to a prefix to form a property key;
 * see {@link org.hibernate.search.engine.cfg.BackendSettings} for details.
 *
 * @author Gunnar Morling
 */
public final class ElasticsearchBackendSettings {
	private ElasticsearchBackendSettings() {
	}
	/**
	 * The name to use for the {@link org.hibernate.search.engine.cfg.BackendSettings#TYPE backend type}
	 * configuration property so that an Elasticsearch backend is instantiated by Hibernate Search.
	 * 
	 * Only useful if you have more than one backend technology in the classpath;
	 * otherwise the backend type is automatically detected.
	 */
	public static final String TYPE_NAME = "elasticsearch";
	/**
	 * The host name and ports of the Elasticsearch servers to connect to.
	 * 
	 * Expects a String representing a host and port such as {@code localhost} or {@code es.mycompany.com:4400},
	 * or a String containing multiple such host-and-port strings separated by commas,
	 * or a {@code Collection} containing such host-and-port strings.
	 * 
	 * Defaults to {@link Defaults#HOSTS}.
	 * 
	 * Multiple servers may be specified for load-balancing: requests will be assigned to each host in turns.
	 */
	public static final String HOSTS = "hosts";
	/**
	 * The protocol to use when connecting to the Elasticsearch servers.
	 * 
	 * Expects a String: either {@code http} or {@code https}.
	 * 
	 * Defaults to {@link Defaults#PROTOCOL}.
	 */
	public static final String PROTOCOL = "protocol";
	/**
	 * The version of Elasticsearch running on the Elasticsearch cluster.
	 * 
	 * Expects either an {@link ElasticsearchVersion} object,
	 * or a String that can be {{@link ElasticsearchVersion#of(String) parsed} in such an object.
	 * 
	 * No default: if not provided, the version will be resolved automatically
	 * by sending a request to the Elasticsearch cluster on startup.
	 */
	public static final String VERSION = "version";
	/**
	 * Whether check version of the Elasticsearch cluster is enabled.
	 * 
	 * Expects a Boolean value such as {@code true} or {@code false},
	 * or a string that can be parsed to such Boolean value.
	 * 
	 * Defaults to {@link Defaults#VERSION_CHECK_ENABLED}.
	 */
	public static final String VERSION_CHECK_ENABLED = "version_check.enabled";
	/**
	 * The username to send when connecting to the Elasticsearch servers (HTTP authentication).
	 * 
	 * Expects a String.
	 * 
	 * Defaults to no username (anonymous access).
	 */
	public static final String USERNAME = "username";
	/**
	 * The password to send when connecting to the Elasticsearch servers (HTTP authentication).
	 * 
	 * Expects a String.
	 * 
	 * Defaults to no username (anonymous access).
	 */
	public static final String PASSWORD = "password";
	/**
	 * The timeout when executing a request to an Elasticsearch server.
	 * 
	 * This includes the time needed to establish a connection, send the request and read the response.
	 * 
	 * Expects a positive Integer value in milliseconds, such as 60000,
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#REQUEST_TIMEOUT}.
	 */
	public static final String REQUEST_TIMEOUT = "request_timeout";
	/**
	 * The timeout when reading responses from an Elasticsearch server.
	 * 
	 * Expects a positive Integer value in milliseconds, such as {@code 60000},
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#READ_TIMEOUT}.
	 */
	public static final String READ_TIMEOUT = "read_timeout";
	/**
	 * The timeout when establishing a connection to an Elasticsearch server.
	 * 
	 * Expects a positive Integer value in milliseconds, such as {@code 3000},
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#CONNECTION_TIMEOUT}.
	 */
	public static final String CONNECTION_TIMEOUT = "connection_timeout";
	/**
	 * The maximum number of simultaneous connections to the Elasticsearch cluster,
	 * all hosts taken together.
	 * 
	 * Expects a positive Integer value, such as {@code 20},
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#MAX_CONNECTIONS}.
	 */
	public static final String MAX_CONNECTIONS = "max_connections";
	/**
	 * The maximum number of simultaneous connections to each host of the Elasticsearch cluster.
	 * 
	 * Expects a positive Integer value, such as {@code 10},
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#MAX_CONNECTIONS_PER_ROUTE}.
	 */
	public static final String MAX_CONNECTIONS_PER_ROUTE = "max_connections_per_route";
	/**
	 * Whether automatic discovery of nodes in the Elasticsearch cluster is enabled.
	 * 
	 * Expects a Boolean value such as {@code true} or {@code false},
	 * or a string that can be parsed to such Boolean value.
	 * 
	 * Defaults to {@link Defaults#DISCOVERY_ENABLED}.
	 */
	public static final String DISCOVERY_ENABLED = "discovery.enabled";
	/**
	 * The time interval between two executions of the automatic discovery, if enabled.
	 * 
	 * Expects a positive Integer value in seconds, such as {@code 2},
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#DISCOVERY_REFRESH_INTERVAL}.
	 */
	public static final String DISCOVERY_REFRESH_INTERVAL = "discovery.refresh_interval";
	/**
	 * Whether JSON included in logs should be pretty-printed (indented, with line breaks).
	 * 
	 * Expects a Boolean value such as {@code true} or {@code false},
	 * or a string that can be parsed to such Boolean value.
	 * 
	 * Defaults to {@link Defaults#LOG_JSON_PRETTY_PRINTING}.
	 */
	public static final String LOG_JSON_PRETTY_PRINTING = "log.json_pretty_printing";
	/**
	 * The multi-tenancy strategy to use.
	 * 
	 * Expects a {@link MultiTenancyStrategyName} value, or a String representation of such value.
	 * 
	 * Defaults to {@link Defaults#MULTI_TENANCY_STRATEGY}.
	 */
	public static final String MULTI_TENANCY_STRATEGY = "multi_tenancy.strategy";
	/**
	 * The strategy for mapping documents to their type name,
	 * i.e. to determine the type name of a document in search hits.
	 * 
	 * Expects a {@link TypeNameMappingStrategyName} value, or a String representation of such value.
	 * 
	 * Defaults to {@link Defaults#MAPPING_TYPE_NAME_STRATEGY}.
	 */
	public static final String MAPPING_TYPE_NAME_STRATEGY = "mapping.type_name.strategy";
	/**
	 * The analysis configurer to use.
	 * 
	 * Expects a reference to a bean of type {@link ElasticsearchAnalysisConfigurer}.
	 * 
	 * Defaults to no value.
	 *
	 * @see org.hibernate.search.engine.cfg The core documentation of configuration properties,
	 * which includes a description of the "bean reference" properties and accepted values.
	 */
	public static final String ANALYSIS_CONFIGURER = "analysis.configurer";
	/**
	 * The layout strategy for indexes and their aliases.
	 * 
	 * Expects a reference to a bean of type {@link IndexLayoutStrategy}.
	 * 
	 * Defaults to the following:
	 * 
	 *     - The non-alias name follows the format {@code 
-<6 digits>}  
	 *     - The write alias follows the format {@code 
-write}  
	 *     - The read alias follows the format {@code 
-read}  
	 * 
	 *
	 * @see org.hibernate.search.engine.cfg The core documentation of configuration properties,
	 * which includes a description of the "bean reference" properties and accepted values.
	 */
	public static final String LAYOUT_STRATEGY = "layout.strategy";
	/**
	 * The size of the thread pool assigned to the backend.
	 * 
	 * Expects a strictly positive integer value,
	 * or a string that can be parsed to such integer value.
	 * 
	 * Defaults to the number of processor cores available to the JVM on startup.
	 * 
	 * See the reference documentation, section "Elasticsearch backend - Threads",
	 * for more information about this setting and its implications.
	 */
	public static final String THREAD_POOL_SIZE = "thread_pool.size";
	/**
	 * Property for specifying the maximum duration a {@code Scroll} will be usable if no
	 * other results are fetched from Elasticsearch.
	 * 
	 * Expects a positive Integer value in seconds, such as 60,
	 * or a String that can be parsed into such Integer value.
	 * 
	 * Defaults to {@link Defaults#SCROLL_TIMEOUT}.
	 */
	public static final String SCROLL_TIMEOUT = "scroll_timeout";
	/**
	 * Default values for the different settings if no values are given.
	 */
	public static final class Defaults {
		private Defaults() {
		}
		public static final List HOSTS = Collections.singletonList( "localhost:9200" );
		public static final String PROTOCOL = "http";
		public static final int REQUEST_TIMEOUT = 60000;
		public static final int READ_TIMEOUT = 60000;
		public static final int CONNECTION_TIMEOUT = 3000;
		public static final int MAX_CONNECTIONS = 20;
		public static final int MAX_CONNECTIONS_PER_ROUTE = 10;
		public static final boolean DISCOVERY_ENABLED = false;
		public static final int DISCOVERY_REFRESH_INTERVAL = 10;
		public static final boolean LOG_JSON_PRETTY_PRINTING = false;
		public static final boolean VERSION_CHECK_ENABLED = true;
		public static final MultiTenancyStrategyName MULTI_TENANCY_STRATEGY = MultiTenancyStrategyName.NONE;
		public static final TypeNameMappingStrategyName MAPPING_TYPE_NAME_STRATEGY = TypeNameMappingStrategyName.DISCRIMINATOR;
		public static final int SCROLL_TIMEOUT = 60;
	}
}