diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/logging/impl/Log.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/logging/impl/Log.java index 4e56eee7abe..63ab77c274b 100644 --- a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/logging/impl/Log.java +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/logging/impl/Log.java @@ -457,4 +457,8 @@ BulkRequestFailedException elasticsearchBulkRequestFailed(String request, String value = "For simple query string queries, Elasticsearch does not support overriding fields with more than one different analyzers: %1$s.") SearchException unableToOverrideQueryAnalyzerWithMoreThanOneAnalyzersForSimpleQueryStringQueries(Collection analyzers); + @Message(id = ES_BACKEND_MESSAGES_START_ID + 84, + value = "The parameter '%2$s' must have value '%3$s' for the factory '%1$s' with Elasticsearch. Current value '%4$s' is invalid." ) + SearchException invalidAnalysisFactoryParameter(@FormatWith(ClassFormatter.class) Class factoryType, String parameter, + String expectedValue, String actualValue); } diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/DefaultElasticsearchAnalyzerDefinitionTranslator.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/DefaultElasticsearchAnalyzerDefinitionTranslator.java index d28ace4a24b..83e055ada58 100644 --- a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/DefaultElasticsearchAnalyzerDefinitionTranslator.java +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/DefaultElasticsearchAnalyzerDefinitionTranslator.java @@ -484,11 +484,11 @@ public void start(Properties properties, BuildContext context) { .disallow( "enablePositionIncrements" ) .end() .builder( TypeTokenFilterFactory.class, "keep_types" ) + .mandateAndStrip( "useWhitelist", "true" ) .transform( "types", new WordSetFileParameterValueTransformer( resourceLoader ) ) - .disallow( "useWhitelist" ) .disallow( "enablePositionIncrements" ) .end() .builder( ClassicFilterFactory.class, "classic" ).end() diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/LuceneAnalysisDefinitionTranslationMapBuilder.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/LuceneAnalysisDefinitionTranslationMapBuilder.java index eb5ba0ed082..2a4c6193bb8 100644 --- a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/LuceneAnalysisDefinitionTranslationMapBuilder.java +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/LuceneAnalysisDefinitionTranslationMapBuilder.java @@ -87,6 +87,10 @@ public SimpleAnalysisDefinitionFactoryBuilder disallow(String luceneParam) { return transform( luceneParam, new ThrowingUnsupportedParameterValueTransformer( luceneClass, luceneParam ) ); } + public SimpleAnalysisDefinitionFactoryBuilder mandateAndStrip(String luceneParam, String luceneValue) { + return transform( new ThrowingMandatoryStrippedParametersTransformer( luceneClass, luceneParam, luceneValue ) ); + } + public SimpleAnalysisDefinitionFactoryBuilder rename(String luceneParam, String elasticsearchParam) { if ( parameterNameTranslations == null ) { parameterNameTranslations = new HashMap<>(); diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/ThrowingMandatoryStrippedParametersTransformer.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/ThrowingMandatoryStrippedParametersTransformer.java new file mode 100644 index 00000000000..b7f29cf84e6 --- /dev/null +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/settings/impl/translation/ThrowingMandatoryStrippedParametersTransformer.java @@ -0,0 +1,54 @@ +/* + * 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.elasticsearch.settings.impl.translation; + +import java.util.Collections; +import java.util.Map; + +import org.hibernate.search.elasticsearch.logging.impl.Log; +import org.hibernate.search.util.logging.impl.LoggerFactory; + +import com.google.gson.JsonElement; + +class ThrowingMandatoryStrippedParametersTransformer implements ParametersTransformer { + + private static final Log log = LoggerFactory.make( Log.class ); + + private final Class factoryClass; + private final String parameterName; + private final String expectedValue; + + ThrowingMandatoryStrippedParametersTransformer(Class factoryClass, String parameterName, String expectedValue) { + this.factoryClass = factoryClass; + this.parameterName = parameterName; + this.expectedValue = expectedValue; + } + + @Override + public Map transform(Map luceneParameters) { + String actualValue = luceneParameters.remove( parameterName ); + + if ( !expectedValue.equals( actualValue ) ) { + throw log.invalidAnalysisFactoryParameter( factoryClass, parameterName, expectedValue, actualValue ); + } + + return Collections.emptyMap(); + } + + @Override + public String toString() { + return new StringBuilder( getClass().getSimpleName() ) + .append( "[" ) + .append( factoryClass ) + .append( "," ) + .append( parameterName ) + .append( "," ) + .append( expectedValue ) + .append( "]" ) + .toString(); + } +} \ No newline at end of file