/* * 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 <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.elasticsearch.cfg; import org.hibernate.search.elasticsearch.analyzer.definition.ElasticsearchAnalysisDefinitionProvider; /** * Configuration properties for Elasticsearch, * * @author Gunnar Morling */ public final class ElasticsearchEnvironment { /** * Default values for the different settings if no values are given. */ public static final class Defaults { public static final DynamicType DYNAMIC_MAPPING = DynamicType.STRICT; public static final String SERVER_URI = "http://localhost:9200"; public static final int SERVER_REQUEST_TIMEOUT = 60000; public static final int SERVER_READ_TIMEOUT = 60000; public static final int SERVER_CONNECTION_TIMEOUT = 3000; public static final int MAX_TOTAL_CONNECTION = 20; public static final int MAX_TOTAL_CONNECTION_PER_ROUTE = 2; public static final boolean DISCOVERY_ENABLED = false; public static final int DISCOVERY_REFRESH_INTERVAL = 10; public static final String DISCOVERY_SCHEME = "http"; public static final IndexSchemaManagementStrategy INDEX_SCHEMA_MANAGEMENT_STRATEGY = IndexSchemaManagementStrategy.CREATE; public static final int INDEX_MANAGEMENT_WAIT_TIMEOUT = 10_000; public static final ElasticsearchIndexStatus REQUIRED_INDEX_STATUS = ElasticsearchIndexStatus.GREEN; public static final boolean REFRESH_AFTER_WRITE = false; public static final int SCROLL_BACKTRACKING_WINDOW_SIZE = 10_000; public static final int SCROLL_FETCH_SIZE = 1_000; public static final int SCROLL_TIMEOUT = 60; } /** * Property for specifying the host names and HTTP ports of the Elasticsearch servers to connect to. * <p> * URIs such as http://myeshost.com:9200 are expected, separated by whitespace characters. * <p> * Defaults to {@link Defaults#SERVER_URI}. * <p> * Multiple servers may be specified for load-balancing: requests will be assigned to each host in turns. * Failover is not supported yet. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.host}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String SERVER_URI = "elasticsearch.host"; /** * Property for specifying the username to send when connecting to the Elasticsearch servers. * <p> * A string is expected. * <p> * Defaults to no username (anonymous access). * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.username}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String SERVER_USERNAME = "elasticsearch.username"; /** * Property for specifying the password to send when connecting to the Elasticsearch servers. * <p> * A string is expected. * <p> * Defaults to no password at all. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.password}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String SERVER_PASSWORD = "elasticsearch.password"; /** * Property for specifying the timeout when executing a request to an Elasticsearch server. * <p> * This includes the time needed to establish a connection, send the request and receive the whole response, * optionally re-trying multiple times in case of node failure. * <p> * A numeric value in milliseconds, such as 60000 is expected. * <p> * Defaults to {@link Defaults#SERVER_REQUEST_TIMEOUT}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.request_timeout}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String SERVER_REQUEST_TIMEOUT = "elasticsearch.request_timeout"; /** * Property for specifying the timeout when reading responses from an Elasticsearch server. * <p> * A numeric value in milliseconds, such as 60000 is expected. * <p> * Defaults to {@link Defaults#SERVER_READ_TIMEOUT}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.read_timeout}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String SERVER_READ_TIMEOUT = "elasticsearch.read_timeout"; /** * Property for specifying the timeout when connecting to an Elasticsearch server. * <p> * A numeric value in milliseconds, such as 2000 is expected. * <p> * Defaults to {@link Defaults#SERVER_CONNECTION_TIMEOUT}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.connection_timeout}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String SERVER_CONNECTION_TIMEOUT = "elasticsearch.connection_timeout"; /** * Property for specifying the maximum number of simultaneous connections to the Elasticsearch cluster. * <p> * A positive numeric value is expected. * <p> * Defaults to {@link Defaults#MAX_TOTAL_CONNECTION}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.max_total_connection}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String MAX_TOTAL_CONNECTION = "elasticsearch.max_total_connection"; /** * Property for specifying the maximum number of simultaneous connections to a single Elasticsearch server. * <p> * A positive numeric value is expected. * <p> * Defaults to {@link Defaults#MAX_TOTAL_CONNECTION_PER_ROUTE}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.max_total_connection_per_route}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String MAX_TOTAL_CONNECTION_PER_ROUTE = "elasticsearch.max_total_connection_per_route"; /** * Property for specifying whether automatic discovery of nodes in the Elasticsearch cluster is enabled. * <p> * Either {@code true} or {@code false} is expected. * <p> * Defaults to {@link Defaults#DISCOVERY_ENABLED}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.discovery.enabled}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String DISCOVERY_ENABLED = "elasticsearch.discovery.enabled"; /** * Property for specifying the time interval between two executions of the automatic discovery, if enabled. * <p> * A positive numeric value in seconds is expected. * <p> * Defaults to {@link Defaults#DISCOVERY_REFRESH_INTERVAL}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.discovery.refresh_interval}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String DISCOVERY_REFRESH_INTERVAL = "elasticsearch.discovery.refresh_interval"; /** * Property for specifying the default scheme to use when connecting to automatically discovered nodes. * <p> * Either "http" or "https" is expected. * <p> * Defaults to {@link Defaults#DISCOVERY_SCHEME}. * <p> * To be given <b>globally</b> only (i.e. prefixed with {@code hibernate.search.default.}). * <b>Cannot</b> be specified per index (e.g. {@code hibernate.search.myIndex.elasticsearch.discovery.default_scheme}). * This limitation will be removed in a future version of Hibernate Search. */ public static final String DISCOVERY_SCHEME = "elasticsearch.discovery.default_scheme"; /** * Property for specifying the strategy for maintaining the Elasticsearch index. * <p> * The external name of one of the {@link IndexSchemaManagementStrategy} constants is expected, e.g. 'update' * (the external names can be retrieved programmatically using {@link IndexSchemaManagementStrategy#getExternalName}). * <p> * Can be given globally (e.g. {@code hibernate.search.default.elasticsearch.index_schema_management_strategy=update}) or * for specific indexes (e.g. {@code hibernate.search.someindex.elasticsearch.index_schema_management_strategy=drop-and-create}). */ public static final String INDEX_SCHEMA_MANAGEMENT_STRATEGY = "elasticsearch.index_schema_management_strategy"; /** * Property for specifying the timeout for index management operations (index creation etc.) in milli-seconds. * <p> * A numeric value such as 1000 is expected. * <p> * Defaults to {@link Defaults#INDEX_MANAGEMENT_WAIT_TIMEOUT} ms. * <p> * Can be given globally (e.g. {@code hibernate.search.default.elasticsearch.index_management_wait_timeout=5000}) or * for specific indexes (e.g. {@code hibernate.search.someindex.elasticsearch.index_management_wait_timeout=2000}). */ public static final String INDEX_MANAGEMENT_WAIT_TIMEOUT = "elasticsearch.index_management_wait_timeout"; /** * Property for specifying the status an index must at least have in order for Hibernate Search to work with it. * <p> * One of 'green', 'yellow' or 'red' is expected. * <p> * Defaults to {@link Defaults#REQUIRED_INDEX_STATUS}. * <p> * Can be given globally (e.g. {@code hibernate.search.default.elasticsearch.required_index_status=green}) or for * specific indexes (e.g. {@code hibernate.search.someindex.elasticsearch.required_index_status=yellow}). */ public static final String REQUIRED_INDEX_STATUS = "elasticsearch.required_index_status"; /** * Property for specifying whether an explicit index refresh should be issued after a set of operations targeting a * given index has been executed or not. * <p> * A boolean value (true, false) is expected. * <p> * Defaults to {@link Defaults#REFRESH_AFTER_WRITE}. * <p> * Can be given globally (e.g. {@code hibernate.search.default.elasticsearch.refresh_after_write=false}) or for * specific indexes (e.g. {@code hibernate.search.someindex.elasticsearch.refresh_after_write=true}). */ public static final String REFRESH_AFTER_WRITE = "elasticsearch.refresh_after_write"; /** * Property for specifying the the minimum number of previous results kept in memory at any time when scrolling. * <p> * This determines the number of positions one will be able to scroll backward (<em>backtracking</em>) without * starting over the scrolling. * <p> * A strictly positive value is expected. * <p> * Defaults to {@link Defaults#SCROLL_BACKTRACKING_WINDOW_SIZE}. * <p> * Can only be given <b>globally</b> (e.g. * {@code hibernate.search.elasticsearch.scroll_backtracking_window_size=10000}). */ public static final String SCROLL_BACKTRACKING_WINDOW_SIZE = "elasticsearch.scroll_backtracking_window_size"; /** * Property for specifying the the number of results fetched by each Elasticsearch call when scrolling. * <p> * A strictly positive value is expected. * <p> * Defaults to {@link Defaults#SCROLL_FETCH_SIZE}. * <p> * Can only be given <b>globally</b> (e.g. * {@code hibernate.search.elasticsearch.scroll_fetch_size=1000}). */ public static final String SCROLL_FETCH_SIZE = "elasticsearch.scroll_fetch_size"; /** * Property for specifying the maximum duration {@code ScrollableResults} will be usable if no * other results are fetched from Elasticsearch, in seconds. * <p> * A strictly positive value is expected. * <p> * Defaults to {@link Defaults#SCROLL_TIMEOUT}. * <p> * Can only be given <b>globally</b> (e.g. * {@code hibernate.search.elasticsearch.scroll_timeout=60}). */ public static final String SCROLL_TIMEOUT = "elasticsearch.scroll_timeout"; /** * Equivalent to elasticsearch "dynamic", define what to do when a document contains a field which was not declared * in the index schema. * <p> * Possible values are: * <ul> * <li>{@code true}: Add new fields dynamically</li> * <li>{@code false}: Ignore new fields</li> * <li>{@code strict}: Throw an exception</li> * </ul> * <p> * Defaults to {@code strict}. */ public static final String DYNAMIC_MAPPING = "elasticsearch.dynamic_mapping"; /** * Provider of default analyzer definitions for Elasticsearch. * <p> * The value must be the fully-qualified name of a class implementing {@link ElasticsearchAnalysisDefinitionProvider}. */ public static final String ANALYZER_DEFINITION_PROVIDER = "hibernate.search.elasticsearch.analyzer_definition_provider"; private ElasticsearchEnvironment() { } }