org.hibernate.search.backend.elasticsearch.index.IndexLifecycleStrategyName 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.index;
import java.lang.invoke.MethodHandles;
import org.hibernate.search.backend.elasticsearch.logging.impl.Log;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;
import org.hibernate.search.util.common.impl.StringHelper;
/**
* Strategy for creating/deleting the indexes in Elasticsearch upon Hibernate Search initialization and shut-down.
*
* @author Gunnar Morling
*/
public enum IndexLifecycleStrategyName {
/**
* Indexes will never be created or deleted.
* Hibernate Search will not even check that the index actually exists.
*
The index schema (mapping and analyzer definitions) is not managed by Hibernate Search and is not checked.
*/
NONE("none"),
/**
* Upon session factory initialization, existing index mappings will be checked
* by Hibernate Search, causing an exception if a required mapping does not exist
* or exists but differs in a non-compatible way (more strict type constraints, for instance),
* or if an analyzer definition is missing or differs in any way.
*
This strategy will not bring any change to the mappings or analyzer definitions, nor create or delete any index.
*/
VALIDATE("validate"),
/**
* Upon session factory initialization, index mappings and analyzer definitions will be updated to match expected ones,
* causing an exception if a mapping to be updated is not compatible with the expected one.
*
Missing indexes will be created along with their mappings and analyzer definitions.
* Missing mappings and analyzer definitions on existing indexes will be created.
*/
UPDATE("update"),
/**
* Existing indexes will not be altered, missing indexes will be created along with their mappings and analyzer definitions.
*/
CREATE("create"),
/**
* Indexes - and all their contents - will be deleted and newly created (along with their mappings and analyzer definitions)
* upon session factory initialization.
*
*
Note that whenever a search factory is altered after initialization (i.e. new entities are mapped),
* the index will not be deleted again: new mappings will simply be added to the index.
*/
DROP_AND_CREATE("drop-and-create"),
/**
* The same as {@link #DROP_AND_CREATE}, but indexes - and all their contents - will be deleted upon session factory
* shut-down as well.
*/
DROP_AND_CREATE_AND_DROP("drop-and-create-and-drop");
private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() );
// This method conforms to the MicroProfile Config specification. Do not change its signature.
public static IndexLifecycleStrategyName of(String value) {
return StringHelper.parseDiscreteValues(
IndexLifecycleStrategyName.values(),
IndexLifecycleStrategyName::getExternalRepresentation,
log::invalidIndexLifecycleStrategyName,
value
);
}
private final String externalRepresentation;
IndexLifecycleStrategyName(String externalRepresentation) {
this.externalRepresentation = externalRepresentation;
}
public String getExternalRepresentation() {
return externalRepresentation;
}
}