From 7ec47ca001b749e923d08e7fede5b7bbaa8fdbc5 Mon Sep 17 00:00:00 2001 From: Fabio Massimo Ercoli Date: Thu, 19 Sep 2019 07:02:34 +0200 Subject: [PATCH] HSEARCH-3042 Add searchAnalyzer option to the programmatic API --- ...ElasticsearchStringIndexFieldTypeOptionsStep.java | 8 ++++++++ .../impl/LuceneStringIndexFieldTypeOptionsStep.java | 8 ++++++++ .../types/dsl/StringIndexFieldTypeOptionsStep.java | 12 ++++++++++++ .../annotation/impl/AnnotationProcessorProvider.java | 4 ++++ .../PropertyMappingFullTextFieldOptionsStep.java | 7 +++++++ .../PropertyMappingFullTextFieldOptionsStepImpl.java | 6 ++++++ .../backend/document/model/StubIndexSchemaNode.java | 5 +++++ .../impl/StubStringIndexFieldTypeOptionsStep.java | 6 ++++++ 8 files changed, 56 insertions(+) diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/types/dsl/impl/ElasticsearchStringIndexFieldTypeOptionsStep.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/types/dsl/impl/ElasticsearchStringIndexFieldTypeOptionsStep.java index 9c03a031d81..33e0d62ab53 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/types/dsl/impl/ElasticsearchStringIndexFieldTypeOptionsStep.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/types/dsl/impl/ElasticsearchStringIndexFieldTypeOptionsStep.java @@ -41,6 +41,8 @@ class ElasticsearchStringIndexFieldTypeOptionsStep private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); private String analyzerName; + // TODO HSEARCH-3042 use this value + private String searchAnalyzerName; private String normalizerName; private Projectable projectable = Projectable.DEFAULT; private Searchable searchable = Searchable.DEFAULT; @@ -60,6 +62,12 @@ public ElasticsearchStringIndexFieldTypeOptionsStep analyzer(String analyzerName return this; } + @Override + public ElasticsearchStringIndexFieldTypeOptionsStep searchAnalyzer(String searchAnalyzerName) { + this.searchAnalyzerName = searchAnalyzerName; + return this; + } + @Override public ElasticsearchStringIndexFieldTypeOptionsStep normalizer(String normalizerName) { this.normalizerName = normalizerName; diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/dsl/impl/LuceneStringIndexFieldTypeOptionsStep.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/dsl/impl/LuceneStringIndexFieldTypeOptionsStep.java index 3bcb1b91030..0706beb4b29 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/dsl/impl/LuceneStringIndexFieldTypeOptionsStep.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/dsl/impl/LuceneStringIndexFieldTypeOptionsStep.java @@ -36,6 +36,8 @@ class LuceneStringIndexFieldTypeOptionsStep private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); private String analyzerName; + // TODO HSEARCH-3042 use this value + private String searchAnalyzerName; private Analyzer analyzer; private String normalizerName; private Analyzer normalizer; @@ -59,6 +61,12 @@ public LuceneStringIndexFieldTypeOptionsStep analyzer(String analyzerName) { return this; } + @Override + public LuceneStringIndexFieldTypeOptionsStep searchAnalyzer(String searchAnalyzerName) { + this.searchAnalyzerName = searchAnalyzerName; + return this; + } + @Override public LuceneStringIndexFieldTypeOptionsStep normalizer(String normalizerName) { this.normalizerName = normalizerName; diff --git a/engine/src/main/java/org/hibernate/search/engine/backend/types/dsl/StringIndexFieldTypeOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/backend/types/dsl/StringIndexFieldTypeOptionsStep.java index 9c642cc3f22..52822024341 100644 --- a/engine/src/main/java/org/hibernate/search/engine/backend/types/dsl/StringIndexFieldTypeOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/backend/types/dsl/StringIndexFieldTypeOptionsStep.java @@ -28,6 +28,18 @@ public interface StringIndexFieldTypeOptionsStep + * A search analyzer can only be set if an analyzer was set through {@link #analyzer(String)}. + * + * @param searchAnalyzerName The name of an analyzer to apply to values when querying the index only. + * It overrides the {@link #analyzer(String)} when querying the index. + * See the reference documentation for more information about analyzers and how to define them. + * @return {@code this}, for method chaining. + */ + S searchAnalyzer(String searchAnalyzerName); + /** * Define the type as normalized. *

diff --git a/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/annotation/impl/AnnotationProcessorProvider.java b/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/annotation/impl/AnnotationProcessorProvider.java index 68b590514dd..d0fed19b26f 100644 --- a/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/annotation/impl/AnnotationProcessorProvider.java +++ b/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/annotation/impl/AnnotationProcessorProvider.java @@ -347,6 +347,10 @@ PropertyMappingFieldOptionsStep initFieldMappingContext(PropertyMappingStep m PropertyMappingFullTextFieldOptionsStep fieldContext = mappingContext.fullTextField( fieldName ) .analyzer( annotation.analyzer() ); + if ( !annotation.searchAnalyzer().isEmpty() ) { + fieldContext.searchAnalyzer( annotation.searchAnalyzer() ); + } + Norms norms = annotation.norms(); if ( !Norms.DEFAULT.equals( norms ) ) { fieldContext.norms( norms ); diff --git a/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/PropertyMappingFullTextFieldOptionsStep.java b/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/PropertyMappingFullTextFieldOptionsStep.java index 6cf6d074577..83538c15762 100644 --- a/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/PropertyMappingFullTextFieldOptionsStep.java +++ b/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/PropertyMappingFullTextFieldOptionsStep.java @@ -24,6 +24,13 @@ public interface PropertyMappingFullTextFieldOptionsStep */ PropertyMappingFullTextFieldOptionsStep analyzer(String analyzerName); + /** + * @param searchAnalyzerName A reference to the analyzer to use for query parameters at search time. + * @return {@code this}, for method chaining. + * @see FullTextField#searchAnalyzer() + */ + PropertyMappingFullTextFieldOptionsStep searchAnalyzer(String searchAnalyzerName); + /** * @param norms Whether index time scoring information should be stored or not. * @return {@code this}, for method chaining. diff --git a/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/impl/PropertyMappingFullTextFieldOptionsStepImpl.java b/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/impl/PropertyMappingFullTextFieldOptionsStepImpl.java index 76621b6a440..fa37f59568d 100644 --- a/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/impl/PropertyMappingFullTextFieldOptionsStepImpl.java +++ b/mapper/pojo/src/main/java/org/hibernate/search/mapper/pojo/mapping/definition/programmatic/impl/PropertyMappingFullTextFieldOptionsStepImpl.java @@ -42,6 +42,12 @@ public PropertyMappingFullTextFieldOptionsStep analyzer(String normalizerName) { return thisAsS(); } + @Override + public PropertyMappingFullTextFieldOptionsStep searchAnalyzer(String searchAnalyzerName) { + fieldModelContributor.add( (c, b) -> c.searchAnalyzer( searchAnalyzerName ) ); + return thisAsS(); + } + @Override public PropertyMappingFullTextFieldOptionsStep norms(Norms norms) { fieldModelContributor.add( (c, b) -> c.norms( norms ) ); diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/document/model/StubIndexSchemaNode.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/document/model/StubIndexSchemaNode.java index 79544fe03ed..22431420e37 100644 --- a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/document/model/StubIndexSchemaNode.java +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/document/model/StubIndexSchemaNode.java @@ -138,6 +138,11 @@ public Builder analyzerName(String analyzerName) { return this; } + public Builder searchAnalyzerName(String searchAnalyzerName) { + attribute( "searchAnalyzerName", searchAnalyzerName ); + return this; + } + public Builder normalizerName(String normalizerName) { attribute( "normalizerName", normalizerName ); return this; diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/types/dsl/impl/StubStringIndexFieldTypeOptionsStep.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/types/dsl/impl/StubStringIndexFieldTypeOptionsStep.java index a8551294c34..6039b98b14e 100644 --- a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/types/dsl/impl/StubStringIndexFieldTypeOptionsStep.java +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/types/dsl/impl/StubStringIndexFieldTypeOptionsStep.java @@ -29,6 +29,12 @@ public StubStringIndexFieldTypeOptionsStep analyzer(String analyzerName) { return this; } + @Override + public StubStringIndexFieldTypeOptionsStep searchAnalyzer(String searchAnalyzerName) { + modifiers.add( b -> b.searchAnalyzerName( searchAnalyzerName ) ); + return this; + } + @Override public StubStringIndexFieldTypeOptionsStep normalizer(String normalizerName) { modifiers.add( b -> b.normalizerName( normalizerName ) );