From d7de38d3ce6568582b73de2c9c80f7628fea147a Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Tue, 9 Apr 2024 15:24:52 +0200 Subject: [PATCH 1/3] HSEARCH-3319 WIP: DRAFT: IDEA: TEST: Type-safe field references --- .../converter/ProjectionConverterIT.java | 3 +- ...mmonQueryStringPredicateFieldMoreStep.java | 45 ++ .../CommonQueryStringPredicateFieldStep.java | 49 ++ .../dsl/ExistsPredicateFieldStep.java | 12 + .../predicate/dsl/KnnPredicateFieldStep.java | 4 + .../dsl/KnnPredicateVectorGenericStep.java | 19 + .../MatchPredicateFieldMoreGenericStep.java | 56 ++ .../dsl/MatchPredicateFieldMoreStep.java | 32 +- .../dsl/MatchPredicateFieldStep.java | 17 +- .../MatchPredicateMatchingGenericStep.java | 26 + .../dsl/MatchPredicateMatchingStep.java | 6 +- .../dsl/NestedPredicateFieldStep.java | 14 + .../dsl/PhrasePredicateFieldMoreStep.java | 42 ++ .../dsl/PhrasePredicateFieldStep.java | 48 ++ .../dsl/RangePredicateFieldMoreStep.java | 38 ++ .../dsl/RangePredicateFieldStep.java | 42 ++ .../predicate/dsl/SearchPredicateFactory.java | 17 + .../AbstractMatchPredicateFieldMoreStep.java | 309 +++++++++++ .../dsl/impl/KnnPredicateFieldStepImpl.java | 27 +- .../impl/MatchPredicateFieldMoreStepImpl.java | 171 ------ .../dsl/impl/MatchPredicateFieldStepImpl.java | 16 +- .../dsl/SearchProjectionFactory.java | 24 + .../search/reference/FieldReference.java | 19 + .../reference/NestedObjectFieldReference.java | 19 + .../reference/ObjectFieldReference.java | 22 + .../ProjectionTypedFieldReference.java | 24 + .../reference/SearchValueFieldReference.java | 21 + .../search/reference/TypedFieldReference.java | 24 + .../search/reference/ValueFieldReference.java | 41 ++ .../impl/ObjectFieldReferenceImpl.java | 23 + .../impl/TypedFieldReferenceImpl.java | 45 ++ .../impl/ValueFieldReferenceImpl.java | 36 ++ .../sort/dsl/ExtendedSearchSortFactory.java | 11 + .../search/sort/dsl/SearchSortFactory.java | 31 ++ .../ObjectProjectionSpecificsIT.java | 2 +- .../search/reference/FieldReferenceIT.java | 525 ++++++++++++++++++ 36 files changed, 1642 insertions(+), 218 deletions(-) create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorGenericStep.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingGenericStep.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java delete mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldMoreStepImpl.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/FieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/NestedObjectFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/ObjectFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/ProjectionTypedFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/SearchValueFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/TypedFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/ValueFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ObjectFieldReferenceImpl.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/impl/TypedFieldReferenceImpl.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ValueFieldReferenceImpl.java create mode 100644 integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/converter/ProjectionConverterIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/converter/ProjectionConverterIT.java index 31faf52ec06..2af3d17eb70 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/search/converter/ProjectionConverterIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/converter/ProjectionConverterIT.java @@ -34,7 +34,8 @@ class ProjectionConverterIT { @RegisterExtension - public DocumentationSetupHelper setupHelper = DocumentationSetupHelper.withSingleBackend( BackendConfigurations.simple() ); + public DocumentationSetupHelper setupHelper = DocumentationSetupHelper.withSingleBackend( + BackendConfigurations.simple() ); private EntityManagerFactory entityManagerFactory; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldMoreStep.java index f3f1bc2166a..1c55c6e6754 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldMoreStep.java @@ -6,6 +6,9 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.util.common.annotation.Incubating; + /** * The step in a query string predicate definition, where the query string to match can be set * (see the superinterface {@link CommonQueryStringPredicateMatchingStep}), @@ -54,4 +57,46 @@ default S field(String fieldPath) { */ S fields(String... fieldPaths); + /** + * Target the given field in the query string predicate, + * as an alternative to the already-targeted fields. + *

+ * Only text fields are supported. + *

+ * See {@link CommonQueryStringPredicateFieldStep#field(String)} for more information on targeted fields. + * + * @param field The field reference representing a path to the index field + * to apply the predicate on. + * @return The next step. + * + * @see CommonQueryStringPredicateFieldStep#field(String) + */ + @Incubating + default S field(TypedFieldReference field) { + return fields( field ); + } + + /** + * Target the given fields in the query string predicate, + * as an alternative to the already-targeted fields. + *

+ * Only text fields are supported. + *

+ * See {@link CommonQueryStringPredicateFieldStep#fields(String...)} for more information on targeted fields. + * + * @param fields The field reference representing paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see CommonQueryStringPredicateFieldStep#fields(String...) + */ + @Incubating + default S fields(TypedFieldReference... fields) { + String[] paths = new String[fields.length]; + for ( int i = 0; i < fields.length; i++ ) { + paths[i] = fields[i].absolutePath(); + } + return fields( paths ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldStep.java index e29d946a3f0..7150919dcb9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/CommonQueryStringPredicateFieldStep.java @@ -6,6 +6,9 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.util.common.annotation.Incubating; + /** * The initial step in a query string predicate definition, where the target field can be set. * @@ -51,4 +54,50 @@ default N field(String fieldPath) { */ N fields(String... fieldPaths); + + /** + * Target the given field in the query string predicate. + *

+ * Only text fields are supported. + *

+ * Multiple fields may be targeted by the same predicate: + * the predicate will match if any targeted field matches. + *

+ * When targeting multiple fields, those fields must have compatible types. + * Please refer to the reference documentation for more information. + * + * @param field The field reference representing a path to the index field + * to apply the predicate on. + * @return The next step. + */ + @Incubating + default N field(TypedFieldReference field) { + return fields( field ); + } + + /** + * Target the given fields in the query string predicate. + *

+ * Only text fields are supported. + *

+ * Equivalent to {@link #field(String)} followed by multiple calls to + * {@link #field(String)}, + * the only difference being that calls to {@link CommonQueryStringPredicateFieldMoreStep#boost(float)} + * and other field-specific settings on the returned step will only need to be done once + * and will apply to all the fields passed to this method. + * + * @param fields The field reference representing paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see #field(String) + */ + @Incubating + default N fields(TypedFieldReference... fields) { + String[] paths = new String[fields.length]; + for ( int i = 0; i < fields.length; i++ ) { + paths[i] = fields[i].absolutePath(); + } + return fields( paths ); + } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExistsPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExistsPredicateFieldStep.java index b1d1080881c..ada6d5d010c 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExistsPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExistsPredicateFieldStep.java @@ -6,6 +6,7 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; /** * The initial step in an "exists" predicate definition, where the target field can be set. @@ -23,4 +24,15 @@ public interface ExistsPredicateFieldSteppath to the index field + * to apply the predicate on. + * @return The next step. + */ + default N field(TypedFieldReference field) { + return field( field.absolutePath() ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java index 75884cd1e08..ceef6db2214 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java @@ -6,6 +6,8 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; + /** * The initial step in a "knn" predicate definition, where the target field can be set. */ @@ -18,4 +20,6 @@ public interface KnnPredicateFieldStep { * @return The next step in the knn predicate DSL. */ KnnPredicateVectorStep field(String fieldPath); + + KnnPredicateVectorGenericStep field(TypedFieldReference field); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorGenericStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorGenericStep.java new file mode 100644 index 00000000000..91dfcd7bdc0 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorGenericStep.java @@ -0,0 +1,19 @@ +/* + * 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.engine.search.predicate.dsl; + +/** + * The step in a "knn" predicate definition where the vector to match is defined. + */ +public interface KnnPredicateVectorGenericStep { + /** + * @param vector The vector from which to compute the distance to vectors in the indexed field. + * @return The next step in the knn predicate DSL. + */ + KnnPredicateOptionsStep matching(T vector); + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java new file mode 100644 index 00000000000..4faf8ec9de3 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java @@ -0,0 +1,56 @@ +/* + * 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.engine.search.predicate.dsl; + +/** + * The step in a "match" predicate definition where the value to match can be set + * (see the superinterface {@link MatchPredicateMatchingStep}), + * or optional parameters for the last targeted field(s) can be set, + * or more target fields can be added. + * + * @param The "self" type (the actual exposed type of this step). + * @param The type of the next step. + * @param The type of the match value. + * @param The type representing the fields. + */ +public interface MatchPredicateFieldMoreGenericStep< + S extends MatchPredicateFieldMoreGenericStep, + N extends MatchPredicateOptionsStep, + T, + V> + extends MatchPredicateMatchingGenericStep, MultiFieldPredicateFieldBoostStep { + + /** + * Target the given field in the match predicate, + * as an alternative to the already-targeted fields. + *

+ * See {@link MatchPredicateFieldStep#field(String)} for more information about targeting fields. + * + * @param field The field with a path to the index field + * to apply the predicate on. + * @return The next step. + * + * @see MatchPredicateFieldStep#field(String) + */ + S field(V field); + + /** + * Target the given fields in the match predicate, + * as an alternative to the already-targeted fields. + *

+ * See {@link MatchPredicateFieldStep#fields(String...)} for more information about targeting fields. + * + * @param fieldPaths The fields with paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see MatchPredicateFieldStep#fields(String...) + */ + @SuppressWarnings("unchecked") + S fields(V... fieldPaths); + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java index bad25a3be8d..f958b4db8b5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java @@ -18,36 +18,6 @@ public interface MatchPredicateFieldMoreStep< S extends MatchPredicateFieldMoreStep, N extends MatchPredicateOptionsStep> - extends MatchPredicateMatchingStep, MultiFieldPredicateFieldBoostStep { - - /** - * Target the given field in the match predicate, - * as an alternative to the already-targeted fields. - *

- * See {@link MatchPredicateFieldStep#field(String)} for more information about targeting fields. - * - * @param fieldPath The path to the index field - * to apply the predicate on. - * @return The next step. - * - * @see MatchPredicateFieldStep#field(String) - */ - default S field(String fieldPath) { - return fields( fieldPath ); - } - - /** - * Target the given fields in the match predicate, - * as an alternative to the already-targeted fields. - *

- * See {@link MatchPredicateFieldStep#fields(String...)} for more information about targeting fields. - * - * @param fieldPaths The paths to the index fields - * to apply the predicate on. - * @return The next step. - * - * @see MatchPredicateFieldStep#fields(String...) - */ - S fields(String... fieldPaths); + extends MatchPredicateMatchingStep, MatchPredicateFieldMoreGenericStep { } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java index 54f81b944b8..401f71ce3d9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java @@ -6,6 +6,7 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; /** * The initial step in a "match" predicate definition, where the target field can be set. @@ -33,7 +34,7 @@ default N field(String fieldPath) { * Target the given fields in the match predicate. *

* Equivalent to {@link #field(String)} followed by multiple calls to - * {@link MatchPredicateFieldMoreStep#field(String)}, + * {@link MatchPredicateFieldMoreStep#field(Object)}, * the only difference being that calls to {@link MatchPredicateFieldMoreStep#boost(float)} * and other field-specific settings on the returned step will only need to be done once * and will apply to all the fields passed to this method. @@ -45,4 +46,18 @@ default N field(String fieldPath) { * @see #field(String) */ N fields(String... fieldPaths); + + /** + * TODO + */ + @SuppressWarnings("unchecked") + default MatchPredicateFieldMoreGenericStep> field(TypedFieldReference field) { + return fields( field ); + } + + /** + * TODO + */ + @SuppressWarnings("unchecked") + MatchPredicateFieldMoreGenericStep> fields(TypedFieldReference... fields); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingGenericStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingGenericStep.java new file mode 100644 index 00000000000..f1b325f5eb6 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingGenericStep.java @@ -0,0 +1,26 @@ +/* + * 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.engine.search.predicate.dsl; + +/** + * The step in a "match" predicate definition where the value to match can be set. + * + * @param The type of the next step. + * @param The type of the match value. + */ +public interface MatchPredicateMatchingGenericStep, T> { + + /** + * Require at least one of the targeted fields to match the given value. + * + * @param value The value to match. + * The signature of this method defines this parameter as an {@code T}, + * but a specific type is expected depending on the targeted field. + * @return The next step. + */ + N matching(T value); +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingStep.java index badf899a97f..0167be5d240 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateMatchingStep.java @@ -13,7 +13,8 @@ * * @param The type of the next step. */ -public interface MatchPredicateMatchingStep> { +public interface MatchPredicateMatchingStep> + extends MatchPredicateMatchingGenericStep { /** * Require at least one of the targeted fields to match the given value. @@ -22,7 +23,7 @@ public interface MatchPredicateMatchingStep> */ N objectField(String fieldPath); + /** + * Set the object field to "nest" on. + *

+ * The selected field must have a {@link ObjectStructure#NESTED nested structure} in the targeted indexes. + * + * @param field The field reference representing a path to the object field + * to apply the predicate on. + * @return The next step. + */ + default N objectField(NestedObjectFieldReference field) { + return objectField( field.absolutePath() ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldMoreStep.java index 4c5700c7e98..a7ce7a145fb 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldMoreStep.java @@ -6,6 +6,8 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; + /** * The step in a "phrase" predicate definition where the phrase to match can be set * (see the superinterface {@link PhrasePredicateMatchingStep}), @@ -54,4 +56,44 @@ default S field(String fieldPath) { */ S fields(String... fieldPaths); + /** + * Target the given field in the phrase predicate, + * as an alternative to the already-targeted fields. + *

+ * Only text fields are supported. + *

+ * See {@link PhrasePredicateFieldStep#field(TypedFieldReference)} for more information on targeted fields. + * + * @param field The field reference representing a path to the index field + * to apply the predicate on. + * @return The next step. + * + * @see PhrasePredicateFieldStep#field(TypedFieldReference) + */ + default S field(TypedFieldReference field) { + return fields( field ); + } + + /** + * Target the given fields in the phrase predicate, + * as an alternative to the already-targeted fields. + *

+ * Only text fields are supported. + *

+ * See {@link PhrasePredicateFieldStep#fields(TypedFieldReference...)} for more information on targeted fields. + * + * @param fields The field references representing paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see PhrasePredicateFieldStep#fields(TypedFieldReference...) + */ + default S fields(TypedFieldReference... fields) { + String[] paths = new String[fields.length]; + for ( int i = 0; i < fields.length; i++ ) { + paths[i] = fields[i].absolutePath(); + } + return fields( paths ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldStep.java index 3778d88c54d..54f150715fd 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/PhrasePredicateFieldStep.java @@ -6,6 +6,8 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; + /** * The initial step in a "phrase" predicate definition, where the target field can be set. * @@ -51,4 +53,50 @@ default N field(String fieldPath) { */ N fields(String... fieldPaths); + /** + * Target the given field in the phrase predicate. + *

+ * Only text fields are supported. + *

+ * Multiple fields may be targeted by the same predicate: + * the predicate will match if any targeted field matches. + *

+ * When targeting multiple fields, those fields must have compatible types. + * Please refer to the reference documentation for more information. + * + * @param field The field reference representing a path to the index field + * to apply the predicate on. + * @return The next step. + * + * @see PhrasePredicateFieldStep#field(TypedFieldReference) + */ + default N field(TypedFieldReference field) { + return fields( field ); + } + + /** + * Target the given fields in the phrase predicate. + *

+ * Only text fields are supported. + *

+ * Equivalent to {@link #field(TypedFieldReference)} followed by multiple calls to + * {@link PhrasePredicateFieldMoreStep#field(TypedFieldReference)}, + * the only difference being that calls to {@link PhrasePredicateFieldMoreStep#boost(float)} + * and other field-specific settings on the returned step will only need to be done once + * and will apply to all the fields passed to this method. + * + * @param fields The field references representing paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see PhrasePredicateFieldStep#fields(TypedFieldReference...) + */ + default N fields(TypedFieldReference... fields) { + String[] paths = new String[fields.length]; + for ( int i = 0; i < fields.length; i++ ) { + paths[i] = fields[i].absolutePath(); + } + return fields( paths ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldMoreStep.java index e78715db486..9c2f0b04629 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldMoreStep.java @@ -6,6 +6,8 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; + /** * The step in a "range" predicate definition where the limits of the range to match can be set * (see the superinterface {@link RangePredicateMatchingStep}), @@ -50,4 +52,40 @@ default S field(String fieldPath) { */ S fields(String... fieldPaths); + /** + * Target the given field in the range predicate, + * as an alternative to the already-targeted fields. + *

+ * See {@link RangePredicateFieldStep#field(TypedFieldReference)} for more information about targeting fields. + * + * @param field The field reference representing a path to the index field + * to apply the predicate on. + * @return The next step. + * + * @see RangePredicateFieldStep#field(TypedFieldReference) + */ + default S field(TypedFieldReference field) { + return fields( field ); + } + + /** + * Target the given fields in the range predicate, + * as an alternative to the already-targeted fields. + *

+ * See {@link RangePredicateFieldStep#fields(TypedFieldReference...)} for more information about targeting fields. + * + * @param fields The field references representing paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see RangePredicateFieldStep#fields(TypedFieldReference...) + */ + default S fields(TypedFieldReference... fields) { + String[] paths = new String[fields.length]; + for ( int i = 0; i < fields.length; i++ ) { + paths[i] = fields[i].absolutePath(); + } + return fields( paths ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldStep.java index 0083db6db3f..5e6100d650d 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/RangePredicateFieldStep.java @@ -6,6 +6,7 @@ */ package org.hibernate.search.engine.search.predicate.dsl; +import org.hibernate.search.engine.search.reference.TypedFieldReference; /** * The initial step in a "range" predicate definition, where the target field can be set. @@ -47,4 +48,45 @@ default N field(String fieldPath) { * @see #field(String) */ N fields(String... fieldPaths); + + /** + * Target the given field in the range predicate. + *

+ * Multiple fields may be targeted by the same predicate: + * the predicate will match if any targeted field matches. + *

+ * When targeting multiple fields, those fields must have compatible types. + * Please refer to the reference documentation for more information. + * + * @param field The field reference representing a path to the index field + * to apply the predicate on. + * @return The next step. + */ + default N field(TypedFieldReference field) { + return fields( field ); + } + + /** + * Target the given fields in the range predicate. + *

+ * Equivalent to {@link #field(TypedFieldReference)} followed by multiple calls to + * {@link RangePredicateFieldMoreStep#field(TypedFieldReference)}, + * the only difference being that calls to {@link RangePredicateFieldMoreStep#boost(float)} + * and other field-specific settings on the returned step will only need to be done once + * and will apply to all the fields passed to this method. + * + * @param fields The field references representing paths to the index fields + * to apply the predicate on. + * @return The next step. + * + * @see #field(TypedFieldReference) + */ + default N fields(TypedFieldReference... fields) { + String[] paths = new String[fields.length]; + for ( int i = 0; i < fields.length; i++ ) { + paths[i] = fields[i].absolutePath(); + } + return fields( paths ); + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java index 4c9ae81486b..ddd66eeaf60 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java @@ -13,6 +13,7 @@ import org.hibernate.search.engine.search.common.BooleanOperator; import org.hibernate.search.engine.search.common.NamedValues; import org.hibernate.search.engine.search.predicate.SearchPredicate; +import org.hibernate.search.engine.search.reference.NestedObjectFieldReference; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.annotation.Incubating; @@ -233,6 +234,22 @@ SimpleBooleanPredicateOptionsStep or(PredicateFinalStep firstSearchPredicate, */ NestedPredicateClausesStep nested(String objectFieldPath); + /** + * Match documents where a {@link ObjectStructure#NESTED nested object} matches inner predicates + * to be defined in the next steps. + *

+ * The resulting nested predicate must match all inner clauses, + * similarly to an {@link #and() "and" predicate}. + * + * @param field The field reference representing a path to the object field + * to apply the predicate on. + * @return The initial step of a DSL where the "nested" predicate can be defined. + * @see NestedPredicateFieldStep + */ + default NestedPredicateClausesStep nested(NestedObjectFieldReference field) { + return nested( field.absolutePath() ); + } + /** * Match documents according to a given query string, * with a simple query language adapted to end users. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java new file mode 100644 index 00000000000..bede5ab86dd --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java @@ -0,0 +1,309 @@ +/* + * 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.engine.search.predicate.dsl.impl; + +import java.lang.invoke.MethodHandles; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import org.hibernate.search.engine.logging.impl.Log; +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.engine.search.common.spi.SearchIndexScope; +import org.hibernate.search.engine.search.predicate.SearchPredicate; +import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldMoreGenericStep; +import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldMoreStep; +import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateOptionsStep; +import org.hibernate.search.engine.search.predicate.dsl.MinimumShouldMatchConditionStep; +import org.hibernate.search.engine.search.predicate.dsl.spi.SearchPredicateDslContext; +import org.hibernate.search.engine.search.predicate.spi.MatchPredicateBuilder; +import org.hibernate.search.engine.search.predicate.spi.MinimumShouldMatchBuilder; +import org.hibernate.search.engine.search.predicate.spi.PredicateTypeKeys; +import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.util.common.impl.Contracts; +import org.hibernate.search.util.common.logging.impl.LoggerFactory; + +abstract class AbstractMatchPredicateFieldMoreStep< + CS extends AbstractMatchPredicateFieldMoreStep.GenericCommonState, + S extends AbstractMatchPredicateFieldMoreStep, + T, + V> + implements AbstractBooleanMultiFieldPredicateCommonState.FieldSetState { + + private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); + + protected final CS commonState; + + protected final Map predicateBuilders = new LinkedHashMap<>(); + + private Float fieldSetBoost; + + public static MatchPredicateFieldMoreStep create( + SearchPredicateDslContext dslContext, String[] fields) { + return new MatchPredicateFieldMoreStepString( + dslContext, + Arrays.asList( fields ) + ); + } + + public static MatchPredicateFieldMoreGenericStep> create( + SearchPredicateDslContext dslContext, TypedFieldReference[] fields) { + return new MatchPredicateFieldMoreStepFieldReference<>( + dslContext, + Arrays.asList( fields ) + ); + } + + protected AbstractMatchPredicateFieldMoreStep(CS commonState, List fieldPaths) { + this.commonState = commonState; + this.commonState.add( thisAsS() ); + SearchIndexScope scope = commonState.scope(); + for ( V fieldPath : fieldPaths ) { + predicateBuilders.put( fieldPath, scope.fieldQueryElement( fieldPath( fieldPath ), PredicateTypeKeys.MATCH ) ); + } + } + + protected abstract S thisAsS(); + + protected abstract String fieldPath(V field); + + public S boost(float boost) { + this.fieldSetBoost = boost; + return thisAsS(); + } + + @Override + public void contributePredicates(Consumer collector) { + for ( MatchPredicateBuilder predicateBuilder : predicateBuilders.values() ) { + // Perform last-minute changes, since it's the last call that will be made on this field set state + commonState.applyBoostAndConstantScore( fieldSetBoost, predicateBuilder ); + + collector.accept( predicateBuilder.build() ); + } + } + + private static class MatchPredicateFieldMoreStepString + extends + AbstractMatchPredicateFieldMoreStep + implements + MatchPredicateFieldMoreStep { + + MatchPredicateFieldMoreStepString(SearchPredicateDslContext dslContext, List fieldPaths) { + super( new CommonState( dslContext ), fieldPaths ); + } + + private MatchPredicateFieldMoreStepString(CommonState commonState, List fieldPaths) { + super( commonState, fieldPaths ); + } + + @Override + protected MatchPredicateFieldMoreStepString thisAsS() { + return this; + } + + @Override + protected String fieldPath(String field) { + return field; + } + + @Override + public MatchPredicateFieldMoreStepString field(String field) { + return new MatchPredicateFieldMoreStepString( commonState, Arrays.asList( field ) ); + } + + @Override + public MatchPredicateFieldMoreStepString fields(String... fieldPaths) { + return new MatchPredicateFieldMoreStepString( commonState, Arrays.asList( fieldPaths ) ); + } + + @Override + public CommonState matching(Object value, ValueConvert convert) { + return commonState.matching( value, convert ); + } + + + private static class CommonState extends GenericCommonState { + + CommonState(SearchPredicateDslContext dslContext) { + super( dslContext ); + } + + CommonState matching(Object value, ValueConvert convert) { + Contracts.assertNotNull( value, "value" ); + Contracts.assertNotNull( convert, "convert" ); + + for ( MatchPredicateFieldMoreStepString fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { + predicateBuilder.value( value, convert ); + } + } + return this; + } + + } + } + + private static class MatchPredicateFieldMoreStepFieldReference + extends + AbstractMatchPredicateFieldMoreStep, + MatchPredicateFieldMoreStepFieldReference, + T, + TypedFieldReference> + implements + MatchPredicateFieldMoreGenericStep, + MatchPredicateFieldMoreStepFieldReference.CommonState, + T, + TypedFieldReference> { + + MatchPredicateFieldMoreStepFieldReference(SearchPredicateDslContext dslContext, + List> fieldPaths) { + super( new CommonState<>( dslContext ), fieldPaths ); + } + + private MatchPredicateFieldMoreStepFieldReference(CommonState commonState, List> fieldPaths) { + super( commonState, fieldPaths ); + } + + @Override + public MatchPredicateFieldMoreStepFieldReference field(TypedFieldReference field) { + return new MatchPredicateFieldMoreStepFieldReference<>( commonState, Collections.singletonList( field ) ); + } + + @Override + @SuppressWarnings("unchecked") + public MatchPredicateFieldMoreStepFieldReference fields(TypedFieldReference... fieldPaths) { + return new MatchPredicateFieldMoreStepFieldReference<>( commonState, Arrays.asList( fieldPaths ) ); + } + + @Override + public CommonState matching(T value) { + return commonState.matching( value ); + } + + @Override + protected MatchPredicateFieldMoreStepFieldReference thisAsS() { + return this; + } + + @Override + protected String fieldPath(TypedFieldReference field) { + return field.absolutePath(); + } + + private static class CommonState + extends GenericCommonState, MatchPredicateFieldMoreStepFieldReference> { + CommonState(SearchPredicateDslContext dslContext) { + super( dslContext ); + } + + CommonState matching(T value) { + Contracts.assertNotNull( value, "value" ); + + for ( MatchPredicateFieldMoreStepFieldReference fieldSetState : getFieldSetStates() ) { + for ( Map.Entry, MatchPredicateBuilder> entry : fieldSetState.predicateBuilders + .entrySet() ) { + entry.getValue().value( value, entry.getKey().valueConvert() ); + } + } + return this; + } + } + } + + static class GenericCommonState> + extends AbstractBooleanMultiFieldPredicateCommonState, S> + implements MatchPredicateOptionsStep> { + + private final MinimumShouldMatchConditionStepImpl> minimumShouldMatchStep; + + GenericCommonState(SearchPredicateDslContext dslContext) { + super( dslContext ); + minimumShouldMatchStep = new MinimumShouldMatchConditionStepImpl<>( new MatchMinimumShouldMatchBuilder(), this ); + } + + @Override + public GenericCommonState fuzzy(int maxEditDistance, int exactPrefixLength) { + if ( maxEditDistance < 0 || 2 < maxEditDistance ) { + throw log.invalidFuzzyMaximumEditDistance( maxEditDistance ); + } + if ( exactPrefixLength < 0 ) { + throw log.invalidExactPrefixLength( exactPrefixLength ); + } + + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { + predicateBuilder.fuzzy( maxEditDistance, exactPrefixLength ); + } + } + return this; + } + + @Override + public GenericCommonState analyzer(String analyzerName) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { + predicateBuilder.analyzer( analyzerName ); + } + } + return this; + } + + @Override + public GenericCommonState skipAnalysis() { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { + predicateBuilder.skipAnalysis(); + } + } + return this; + } + + @Override + protected GenericCommonState thisAsS() { + return this; + } + + @Override + public MinimumShouldMatchConditionStep> minimumShouldMatch() { + return minimumShouldMatchStep; + } + + @Override + public GenericCommonState minimumShouldMatch( + Consumer> constraintContributor) { + constraintContributor.accept( minimumShouldMatchStep ); + return this; + } + + private class MatchMinimumShouldMatchBuilder implements MinimumShouldMatchBuilder { + @Override + public void minimumShouldMatchNumber(int ignoreConstraintCeiling, int matchingClausesNumber) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { + predicateBuilder.minimumShouldMatchNumber( ignoreConstraintCeiling, matchingClausesNumber ); + } + } + } + + @Override + public void minimumShouldMatchPercent(int ignoreConstraintCeiling, int matchingClausesPercent) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { + predicateBuilder.minimumShouldMatchPercent( ignoreConstraintCeiling, matchingClausesPercent ); + } + } + } + } + } + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java index fc9d8c9125a..74dd1c62b71 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java @@ -11,6 +11,7 @@ import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.KnnPredicateFieldStep; import org.hibernate.search.engine.search.predicate.dsl.KnnPredicateOptionsStep; +import org.hibernate.search.engine.search.predicate.dsl.KnnPredicateVectorGenericStep; import org.hibernate.search.engine.search.predicate.dsl.KnnPredicateVectorStep; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; @@ -19,6 +20,7 @@ import org.hibernate.search.engine.search.predicate.spi.BooleanPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.KnnPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.PredicateTypeKeys; +import org.hibernate.search.engine.search.reference.TypedFieldReference; public class KnnPredicateFieldStepImpl extends AbstractPredicateFinalStep @@ -43,11 +45,9 @@ public KnnPredicateVectorStep field(String fieldPath) { } @Override - protected SearchPredicate build() { - if ( this.booleanBuilder != null ) { - builder.filter( booleanBuilder.build() ); - } - return builder.build(); + public KnnPredicateVectorGenericStep field(TypedFieldReference field) { + this.field( field.absolutePath() ); + return new KnnPredicateVectorGenericStepImpl<>(); } @Override @@ -93,6 +93,14 @@ public KnnPredicateOptionsStep constantScore() { return this; } + @Override + protected SearchPredicate build() { + if ( this.booleanBuilder != null ) { + builder.filter( booleanBuilder.build() ); + } + return builder.build(); + } + private BooleanPredicateBuilder booleanPredicateBuilder() { if ( this.booleanBuilder == null ) { this.booleanBuilder = dslContext.scope().predicateBuilders().bool(); @@ -100,4 +108,13 @@ private BooleanPredicateBuilder booleanPredicateBuilder() { return this.booleanBuilder; } + private class KnnPredicateVectorGenericStepImpl implements KnnPredicateVectorGenericStep { + + @Override + public KnnPredicateOptionsStep matching(T vector) { + KnnPredicateFieldStepImpl.this.builder.vector( vector ); + return KnnPredicateFieldStepImpl.this; + } + } + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldMoreStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldMoreStepImpl.java deleted file mode 100644 index e0afd0e1238..00000000000 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldMoreStepImpl.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * 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.engine.search.predicate.dsl.impl; - -import java.lang.invoke.MethodHandles; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.Consumer; - -import org.hibernate.search.engine.logging.impl.Log; -import org.hibernate.search.engine.search.common.ValueConvert; -import org.hibernate.search.engine.search.common.spi.SearchIndexScope; -import org.hibernate.search.engine.search.predicate.SearchPredicate; -import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldMoreStep; -import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateOptionsStep; -import org.hibernate.search.engine.search.predicate.dsl.MinimumShouldMatchConditionStep; -import org.hibernate.search.engine.search.predicate.dsl.spi.SearchPredicateDslContext; -import org.hibernate.search.engine.search.predicate.spi.MatchPredicateBuilder; -import org.hibernate.search.engine.search.predicate.spi.MinimumShouldMatchBuilder; -import org.hibernate.search.engine.search.predicate.spi.PredicateTypeKeys; -import org.hibernate.search.util.common.impl.Contracts; -import org.hibernate.search.util.common.logging.impl.LoggerFactory; - -class MatchPredicateFieldMoreStepImpl - implements MatchPredicateFieldMoreStep>, - AbstractBooleanMultiFieldPredicateCommonState.FieldSetState { - - private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - - private final CommonState commonState; - - private final List predicateBuilders = new ArrayList<>(); - - private Float fieldSetBoost; - - MatchPredicateFieldMoreStepImpl(CommonState commonState, List fieldPaths) { - this.commonState = commonState; - this.commonState.add( this ); - SearchIndexScope scope = commonState.scope(); - for ( String fieldPath : fieldPaths ) { - predicateBuilders.add( scope.fieldQueryElement( fieldPath, PredicateTypeKeys.MATCH ) ); - } - } - - @Override - public MatchPredicateFieldMoreStepImpl fields(String... fieldPaths) { - return new MatchPredicateFieldMoreStepImpl( commonState, Arrays.asList( fieldPaths ) ); - } - - @Override - public MatchPredicateFieldMoreStepImpl boost(float boost) { - this.fieldSetBoost = boost; - return this; - } - - @Override - public MatchPredicateOptionsStep matching(Object value, ValueConvert convert) { - return commonState.matching( value, convert ); - } - - @Override - public void contributePredicates(Consumer collector) { - for ( MatchPredicateBuilder predicateBuilder : predicateBuilders ) { - // Perform last-minute changes, since it's the last call that will be made on this field set state - commonState.applyBoostAndConstantScore( fieldSetBoost, predicateBuilder ); - - collector.accept( predicateBuilder.build() ); - } - } - - static class CommonState extends AbstractBooleanMultiFieldPredicateCommonState - implements MatchPredicateOptionsStep { - private final MinimumShouldMatchConditionStepImpl minimumShouldMatchStep; - - CommonState(SearchPredicateDslContext dslContext) { - super( dslContext ); - minimumShouldMatchStep = new MinimumShouldMatchConditionStepImpl<>( new MatchMinimumShouldMatchBuilder(), this ); - } - - MatchPredicateOptionsStep matching(Object value, ValueConvert convert) { - Contracts.assertNotNull( value, "value" ); - Contracts.assertNotNull( convert, "convert" ); - - for ( MatchPredicateFieldMoreStepImpl fieldSetState : getFieldSetStates() ) { - for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders ) { - predicateBuilder.value( value, convert ); - } - } - return this; - } - - @Override - public CommonState fuzzy(int maxEditDistance, int exactPrefixLength) { - if ( maxEditDistance < 0 || 2 < maxEditDistance ) { - throw log.invalidFuzzyMaximumEditDistance( maxEditDistance ); - } - if ( exactPrefixLength < 0 ) { - throw log.invalidExactPrefixLength( exactPrefixLength ); - } - - for ( MatchPredicateFieldMoreStepImpl fieldSetState : getFieldSetStates() ) { - for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders ) { - predicateBuilder.fuzzy( maxEditDistance, exactPrefixLength ); - } - } - return this; - } - - @Override - public CommonState analyzer(String analyzerName) { - for ( MatchPredicateFieldMoreStepImpl fieldSetState : getFieldSetStates() ) { - for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders ) { - predicateBuilder.analyzer( analyzerName ); - } - } - return this; - } - - @Override - public CommonState skipAnalysis() { - for ( MatchPredicateFieldMoreStepImpl fieldSetState : getFieldSetStates() ) { - for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders ) { - predicateBuilder.skipAnalysis(); - } - } - return this; - } - - @Override - protected CommonState thisAsS() { - return this; - } - - @Override - public MinimumShouldMatchConditionStep minimumShouldMatch() { - return minimumShouldMatchStep; - } - - @Override - public CommonState minimumShouldMatch(Consumer> constraintContributor) { - constraintContributor.accept( minimumShouldMatchStep ); - return this; - } - - private class MatchMinimumShouldMatchBuilder implements MinimumShouldMatchBuilder { - @Override - public void minimumShouldMatchNumber(int ignoreConstraintCeiling, int matchingClausesNumber) { - for ( MatchPredicateFieldMoreStepImpl fieldSetState : getFieldSetStates() ) { - for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders ) { - predicateBuilder.minimumShouldMatchNumber( ignoreConstraintCeiling, matchingClausesNumber ); - } - } - } - - @Override - public void minimumShouldMatchPercent(int ignoreConstraintCeiling, int matchingClausesPercent) { - for ( MatchPredicateFieldMoreStepImpl fieldSetState : getFieldSetStates() ) { - for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders ) { - predicateBuilder.minimumShouldMatchPercent( ignoreConstraintCeiling, matchingClausesPercent ); - } - } - } - } - } - -} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java index 05eb5c247e3..38ecf5a9d9a 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java @@ -6,22 +6,28 @@ */ package org.hibernate.search.engine.search.predicate.dsl.impl; -import java.util.Arrays; - +import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldMoreGenericStep; import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldMoreStep; import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldStep; import org.hibernate.search.engine.search.predicate.dsl.spi.SearchPredicateDslContext; +import org.hibernate.search.engine.search.reference.TypedFieldReference; public final class MatchPredicateFieldStepImpl implements MatchPredicateFieldStep> { - private final MatchPredicateFieldMoreStepImpl.CommonState commonState; + private final SearchPredicateDslContext dslContext; public MatchPredicateFieldStepImpl(SearchPredicateDslContext dslContext) { - this.commonState = new MatchPredicateFieldMoreStepImpl.CommonState( dslContext ); + this.dslContext = dslContext; } @Override public MatchPredicateFieldMoreStep fields(String... fieldPaths) { - return new MatchPredicateFieldMoreStepImpl( commonState, Arrays.asList( fieldPaths ) ); + return AbstractMatchPredicateFieldMoreStep.create( dslContext, fieldPaths ); + } + + @Override + @SuppressWarnings("unchecked") + public MatchPredicateFieldMoreGenericStep> fields(TypedFieldReference... fields) { + return AbstractMatchPredicateFieldMoreStep.create( dslContext, fields ); } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java index 2d6f852f50f..effa365c0b9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java @@ -15,6 +15,8 @@ import org.hibernate.search.engine.search.common.NamedValues; import org.hibernate.search.engine.search.common.ValueConvert; import org.hibernate.search.engine.search.projection.SearchProjection; +import org.hibernate.search.engine.search.reference.ObjectFieldReference; +import org.hibernate.search.engine.search.reference.ProjectionTypedFieldReference; import org.hibernate.search.engine.spatial.GeoPoint; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.annotation.Incubating; @@ -160,6 +162,11 @@ default FieldProjectionValueStep field(String fieldPath) { */ FieldProjectionValueStep field(String fieldPath, ValueConvert convert); + @Incubating + default FieldProjectionValueStep field(ProjectionTypedFieldReference fieldReference) { + return field( fieldReference.absolutePath(), fieldReference.projectionType(), fieldReference.valueConvert() ); + } + /** * Project on the score of the hit. * @@ -177,6 +184,16 @@ default FieldProjectionValueStep field(String fieldPath) { */ DistanceToFieldProjectionValueStep distance(String fieldPath, GeoPoint center); + /** + * TODO + */ + @Incubating + default DistanceToFieldProjectionValueStep distance( + ProjectionTypedFieldReference fieldReference, + GeoPoint center) { + return distance( fieldReference.absolutePath(), center ); + } + /** * Starts the definition of an object projection, * which will yield one value per object in a given object field, @@ -194,6 +211,13 @@ default FieldProjectionValueStep field(String fieldPath) { */ CompositeProjectionInnerStep object(String objectFieldPath); + /** + * TODO + */ + default CompositeProjectionInnerStep object(ObjectFieldReference objectField) { + return object( objectField.absolutePath() ); + } + /** * Starts the definition of a composite projection, * which will combine multiple given projections. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/FieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/FieldReference.java new file mode 100644 index 00000000000..43d8606233c --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/FieldReference.java @@ -0,0 +1,19 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * The most common interface for the field reference hierarchy. + */ +@Incubating +public interface FieldReference { + + String absolutePath(); + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/NestedObjectFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/NestedObjectFieldReference.java new file mode 100644 index 00000000000..d149a744ad1 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/NestedObjectFieldReference.java @@ -0,0 +1,19 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * The field reference representing a nested object. + * + * @see org.hibernate.search.engine.backend.types.ObjectStructure#NESTED + */ +@Incubating +public interface NestedObjectFieldReference extends ObjectFieldReference { + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/ObjectFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/ObjectFieldReference.java new file mode 100644 index 00000000000..8c05bf22df9 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/ObjectFieldReference.java @@ -0,0 +1,22 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.engine.search.reference.impl.ObjectFieldReferenceImpl; +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * The field reference representing an object. + */ +@Incubating +public interface ObjectFieldReference extends FieldReference { + + static ObjectFieldReference of(String path) { + return new ObjectFieldReferenceImpl( path ); + } + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/ProjectionTypedFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/ProjectionTypedFieldReference.java new file mode 100644 index 00000000000..c330c1081c4 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/ProjectionTypedFieldReference.java @@ -0,0 +1,24 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * @param The expected returned type. + */ +@Incubating +public interface ProjectionTypedFieldReference extends FieldReference { + + Class projectionType(); + + default ValueConvert valueConvert() { + return ValueConvert.YES; + } + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/SearchValueFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/SearchValueFieldReference.java new file mode 100644 index 00000000000..09625e96483 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/SearchValueFieldReference.java @@ -0,0 +1,21 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.util.common.annotation.Incubating; + +/** + */ +@Incubating +public interface SearchValueFieldReference extends ProjectionTypedFieldReference

, TypedFieldReference { + + default ValueConvert valueConvert() { + return ValueConvert.YES; + } + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/TypedFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/TypedFieldReference.java new file mode 100644 index 00000000000..c89c445e2d0 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/TypedFieldReference.java @@ -0,0 +1,24 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * @param The expected returned type. + */ +@Incubating +public interface TypedFieldReference extends FieldReference { + + Class type(); + + default ValueConvert valueConvert() { + return ValueConvert.YES; + } + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/ValueFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/ValueFieldReference.java new file mode 100644 index 00000000000..0685fbd6ca0 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/ValueFieldReference.java @@ -0,0 +1,41 @@ +/* + * 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.engine.search.reference; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.engine.search.reference.impl.ValueFieldReferenceImpl; +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * @param The type of the attribute (dsl converter). {@link org.hibernate.search.engine.backend.types.converter.spi.DslConverter}s V + * @param The type of the index field. {@link org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter}s F or {@link org.hibernate.search.engine.backend.types.converter.spi.DslConverter}s F + * @param

The type of the attribute (projection converter) {@link org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter}s V. + */ +@Incubating +public interface ValueFieldReference extends SearchValueFieldReference { + + static ValueFieldReference of(String absolutePath, Class dslType, Class indexType, + Class

projectionType) { + return new ValueFieldReferenceImpl<>( absolutePath, dslType, indexType, projectionType ); + } + + /** + * Applies {@link ValueConvert#NO} + */ + SearchValueFieldReference noConverter(); + + /** + * Applies {@link ValueConvert#PARSE} + */ + + SearchValueFieldReference asString(); + + @Override + default ValueConvert valueConvert() { + return ValueConvert.YES; + } +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ObjectFieldReferenceImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ObjectFieldReferenceImpl.java new file mode 100644 index 00000000000..9c2bfeef93b --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ObjectFieldReferenceImpl.java @@ -0,0 +1,23 @@ +/* + * 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.engine.search.reference.impl; + +import org.hibernate.search.engine.search.reference.ObjectFieldReference; + +public class ObjectFieldReferenceImpl implements ObjectFieldReference { + + private final String absolutePath; + + public ObjectFieldReferenceImpl(String absolutePath) { + this.absolutePath = absolutePath; + } + + @Override + public String absolutePath() { + return absolutePath; + } +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/TypedFieldReferenceImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/TypedFieldReferenceImpl.java new file mode 100644 index 00000000000..5b43bbb1b3b --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/TypedFieldReferenceImpl.java @@ -0,0 +1,45 @@ +/* + * 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.engine.search.reference.impl; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.engine.search.reference.SearchValueFieldReference; + +public class TypedFieldReferenceImpl implements SearchValueFieldReference { + + private final String absolutePath; + private final ValueConvert valueConvert; + private final Class input; + private final Class

projection; + + public TypedFieldReferenceImpl(String absolutePath, ValueConvert valueConvert, Class input, Class

projection) { + this.absolutePath = absolutePath; + this.valueConvert = valueConvert; + this.input = input; + this.projection = projection; + } + + @Override + public String absolutePath() { + return absolutePath; + } + + @Override + public ValueConvert valueConvert() { + return valueConvert; + } + + @Override + public Class

projectionType() { + return projection; + } + + @Override + public Class type() { + return input; + } +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ValueFieldReferenceImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ValueFieldReferenceImpl.java new file mode 100644 index 00000000000..4955d90ac13 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/impl/ValueFieldReferenceImpl.java @@ -0,0 +1,36 @@ +/* + * 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.engine.search.reference.impl; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.engine.search.reference.SearchValueFieldReference; +import org.hibernate.search.engine.search.reference.ValueFieldReference; + +public class ValueFieldReferenceImpl extends TypedFieldReferenceImpl + implements ValueFieldReference { + + private final TypedFieldReferenceImpl noConverter; + private final TypedFieldReferenceImpl string; + + public ValueFieldReferenceImpl(String absolutePath, Class inputType, Class indexType, Class

projectionType) { + super( absolutePath, ValueConvert.YES, inputType, projectionType ); + this.noConverter = new TypedFieldReferenceImpl<>( absolutePath, ValueConvert.NO, indexType, indexType ); + this.string = new TypedFieldReferenceImpl<>( absolutePath, ValueConvert.PARSE, String.class, String.class ); + } + + @Override + public SearchValueFieldReference noConverter() { + return noConverter; + } + + + @Override + public SearchValueFieldReference asString() { + return string; + } + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java index dd77dcc6a24..9c294afc98a 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java @@ -9,6 +9,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.reference.TypedFieldReference; import org.hibernate.search.engine.spatial.GeoPoint; /** @@ -30,9 +31,19 @@ public interface ExtendedSearchSortFactory field(String fieldPath); + @Override + default FieldSortOptionsStep field(TypedFieldReference field) { + return field( field.absolutePath() ); + } + @Override DistanceSortOptionsStep distance(String fieldPath, GeoPoint location); + @Override + default DistanceSortOptionsStep distance(TypedFieldReference field, GeoPoint location) { + return distance( field.absolutePath(), location ); + } + @Override default DistanceSortOptionsStep distance(String fieldPath, double latitude, double longitude) { return distance( fieldPath, GeoPoint.of( latitude, longitude ) ); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java index fc4809cb353..5d33ce53a6b 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java @@ -11,6 +11,7 @@ import org.hibernate.search.engine.search.common.NamedValues; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.reference.TypedFieldReference; import org.hibernate.search.engine.spatial.GeoPoint; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.annotation.Incubating; @@ -63,6 +64,20 @@ public interface SearchSortFactory { */ FieldSortOptionsStep field(String fieldPath); + /** + * Order elements by the value of a specific field. + *

+ * The default order is ascending. + * + * @param field The field reference representing a path to the index field to sort by. + * @return A DSL step where the "field" sort can be defined in more details. + * @throws SearchException If the field doesn't exist or cannot be sorted on. + */ + @Incubating + default FieldSortOptionsStep field(TypedFieldReference field) { + return field( field.absolutePath() ); + } + /** * Order elements by the distance from the location stored in the specified field to the location specified. *

@@ -76,6 +91,22 @@ public interface SearchSortFactory { */ DistanceSortOptionsStep distance(String fieldPath, GeoPoint location); + /** + * Order elements by the distance from the location stored in the specified field to the location specified. + *

+ * The default order is ascending. + * + * @param field The field reference representing a path to the index field + * containing the location to compute the distance from. + * @param location The location to which we want to compute the distance. + * @return A DSL step where the "distance" sort can be defined in more details. + * @throws SearchException If the field type does not constitute a valid location. + */ + default DistanceSortOptionsStep distance(TypedFieldReference field, + GeoPoint location) { + return distance( field.absolutePath(), location ); + } + /** * Order elements by the distance from the location stored in the specified field to the location specified. *

diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/ObjectProjectionSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/ObjectProjectionSpecificsIT.java index 12ee3fbd62d..d427c1c29db 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/ObjectProjectionSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/ObjectProjectionSpecificsIT.java @@ -44,7 +44,7 @@ static void setup() { @Test void nullFieldPath() { - assertThatThrownBy( () -> index.createScope().projection().object( null ) ) + assertThatThrownBy( () -> index.createScope().projection().object( (String) null ) ) .isInstanceOf( IllegalArgumentException.class ) .hasMessageContaining( "'objectFieldPath' must not be null" ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java new file mode 100644 index 00000000000..1875eb8a4c9 --- /dev/null +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java @@ -0,0 +1,525 @@ +/* + * 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.integrationtest.backend.tck.search.reference; + +import static org.hibernate.search.util.impl.integrationtest.common.assertion.SearchResultAssert.assertThatQuery; + +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.util.List; + +import org.hibernate.search.engine.backend.document.DocumentElement; +import org.hibernate.search.engine.backend.document.IndexFieldReference; +import org.hibernate.search.engine.backend.document.IndexObjectFieldReference; +import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaElement; +import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaObjectField; +import org.hibernate.search.engine.backend.types.ObjectStructure; +import org.hibernate.search.engine.backend.types.Projectable; +import org.hibernate.search.engine.backend.types.VectorSimilarity; +import org.hibernate.search.engine.backend.types.converter.FromDocumentValueConverter; +import org.hibernate.search.engine.backend.types.converter.ToDocumentValueConverter; +import org.hibernate.search.engine.backend.types.converter.runtime.FromDocumentValueConvertContext; +import org.hibernate.search.engine.backend.types.converter.runtime.ToDocumentValueConvertContext; +import org.hibernate.search.engine.search.reference.NestedObjectFieldReference; +import org.hibernate.search.engine.search.reference.ValueFieldReference; +import org.hibernate.search.engine.search.reference.impl.ObjectFieldReferenceImpl; +import org.hibernate.search.integrationtest.backend.tck.search.predicate.AbstractPredicateDataSet; +import org.hibernate.search.integrationtest.backend.tck.testsupport.util.extension.SearchSetupHelper; +import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; +import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +class FieldReferenceIT { + + @RegisterExtension + public static final SearchSetupHelper setupHelper = SearchSetupHelper.create(); + + private static final SimpleMappedIndex index = SimpleMappedIndex.of( IndexBinding::new ); + + private static final DataSet dataSet = new DataSet(); + + @BeforeAll + static void setup() { + setupHelper.start().withIndex( index ).setup(); + + BulkIndexer bulkIndexer = index.bulkIndexer(); + dataSet.contribute( index, bulkIndexer ); + bulkIndexer.join(); + } + + @Test + void test() { + assertThatQuery( index.query() + .where( f -> f.bool() + .should( f.match().field( IndexedEntity_.localDate ).matching( LocalDate.of( 2024, 1, 1 ) ) ) + .should( f.match().field( IndexedEntity_.localDate.asString() ).matching( "2024-01-02" ) ) + ) ) + .hasDocRefHitsAnyOrder( index.typeName(), dataSet.docId( 0 ), dataSet.docId( 1 ) ); + + assertThatQuery( index.query() + .select( f -> f.field( IndexedEntity_.string ) ) + .where( f -> f.matchAll() ) ) + .hasHitsAnyOrder( "string_0", "string_1", "string_2" ); + + assertThatQuery( index.query() + .select( f -> f.field( IndexedEntity_.stringList ).multi() ) + .where( f -> f.matchAll() ) ) + .hasHitsAnyOrder( + List.of( "string_list_0_0", "string_list_1_0", "string_list_2_0" ), + List.of( "string_list_0_1", "string_list_1_1", "string_list_2_1" ), + List.of( "string_list_0_2", "string_list_1_2", "string_list_2_2" ) + ); + + + assertThatQuery( index.query() + .select( + f -> f.object( IndexedEntity_.nestedEmbeddedEntity ) + .from( f.field( IndexedEntity_.nestedEmbeddedEntity.string ), + f.field( IndexedEntity_.nestedEmbeddedEntity.someEnum ) ) + .asList() + ) + .where( f -> f.matchAll() ) ) + .hasHitsAnyOrder( + List.of( "string_n_0", SomeEnum.VALUE_1 ), + List.of( "string_n_1", SomeEnum.VALUE_2 ), + List.of( "string_n_2", SomeEnum.VALUE_3 ) + ); + + assertThatQuery( index.query() + .select( + f -> f.field( IndexedEntity_.vector ) + ) + .where( f -> f.knn( 10 ).field( IndexedEntity_.vector ) + .matching( new float[] { 1.0f, 1.0f, 1.0f } ) ) ) + .hasHitsAnyOrder( + new float[] { 0.0f, 0.0f, 0.0f }, + new float[] { 10.0f, 100.0f, 1000.0f }, + new float[] { 20.0f, 200.0f, 2000.0f } + ); + + assertThatQuery( index.query() + .where( f -> f.nested( IndexedEntity_.nestedEmbeddedEntity ) + .add( f.match().field( IndexedEntity_.nestedEmbeddedEntity.someEnum ) + .matching( SomeEnum.VALUE_1 ) ) ) ) + .hasDocRefHitsAnyOrder( index.typeName(), dataSet.docId( 0 ) ); + + assertThatQuery( index.query() + .select( f -> f.field( IndexedEntity_.stringProjectedAsBytes ) ) + .where( f -> f.matchAll() ) + ).hasHitsAnyOrder( + new byte[] { 97, 95, 48 }, + new byte[] { 97, 95, 50 }, + new byte[] { 97, 95, 49 } + ); + + assertThatQuery( index.query() + .select( f -> f.field( IndexedEntity_.stringProjectedAsBytes.noConverter() ) ) + .where( f -> f.matchAll() ) + ).hasHitsAnyOrder( + "a_0", "a_1", "a_2" + ); + } + + private static class IndexedEntity { + private int primitiveInteger; + private Double wrapperDouble; + private String string; + private String stringProjectedAsBytes; + private LocalDate localDate; + private float[] vector; + + private List stringList; + + private EmbeddedEntity nestedEmbeddedEntity; + private EmbeddedEntity flattenedEmbeddedEntity; + + private List embeddedEntityList; + + // @IndexedEmbedded(includeDepth = 2, + // structure = ObjectStructure.NESTED, + // excludePaths = { + // "parent.parent.primitiveInteger" + // // ... (other paths so that only string and vector fields are included) + // } + // ) + private IndexedEntity parent; + + } + + private static class EmbeddedEntity { + private String string; + private SomeEnum someEnum; + } + + private enum SomeEnum { + VALUE_1, VALUE_2, VALUE_3 + } + + public static class IndexedEntity_ { + public static ValueFieldReference primitiveInteger; + public static ValueFieldReference wrapperDouble; + public static ValueFieldReference string; + public static ValueFieldReference stringProjectedAsBytes; + public static ValueFieldReference localDate; + public static ValueFieldReference vector; + + public static ValueFieldReference stringList; + public static NestedEmbeddedEntity_ nestedEmbeddedEntity; + public static EmbeddedEntityList_ embeddedEntityList; + + public static FlattenedEmbeddedEntity_ flattenedEmbeddedEntity; + + public static Parent_ parent; + + static { + primitiveInteger = ValueFieldReference.of( "primitiveInteger", Integer.class, Integer.class, Integer.class ); + wrapperDouble = ValueFieldReference.of( "wrapperDouble", Double.class, Double.class, Double.class ); + string = ValueFieldReference.of( "string", String.class, String.class, String.class ); + stringProjectedAsBytes = + ValueFieldReference.of( "stringProjectedAsBytes", String.class, String.class, byte[].class ); + localDate = ValueFieldReference.of( "localDate", LocalDate.class, LocalDate.class, LocalDate.class ); + vector = ValueFieldReference.of( "vector", float[].class, float[].class, float[].class ); + stringList = ValueFieldReference.of( "stringList", String.class, String.class, String.class ); + + flattenedEmbeddedEntity = new FlattenedEmbeddedEntity_( "flattenedEmbeddedEntity" ); + nestedEmbeddedEntity = new NestedEmbeddedEntity_( "nestedEmbeddedEntity" ); + embeddedEntityList = new EmbeddedEntityList_( "embeddedEntityList" ); + parent = new Parent_( "parent" ); + } + + public static class NestedEmbeddedEntity_ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { + + public ValueFieldReference string; + public ValueFieldReference someEnum; + + private NestedEmbeddedEntity_(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.someEnum = + ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + } + } + + public static class EmbeddedEntityList_ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { + + public ValueFieldReference string; + public ValueFieldReference someEnum; + + private EmbeddedEntityList_(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.someEnum = + ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + } + } + + public static class FlattenedEmbeddedEntity_ extends ObjectFieldReferenceImpl { + + public ValueFieldReference string; + public ValueFieldReference someEnum; + + private FlattenedEmbeddedEntity_(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.someEnum = + ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + } + } + + public static class Parent_ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { + public ValueFieldReference primitiveInteger; + public ValueFieldReference wrapperDouble; + public ValueFieldReference string; + public ValueFieldReference stringProjectedAsBytes; + public ValueFieldReference localDate; + public ValueFieldReference vector; + + public ValueFieldReference stringList; + public NestedEmbeddedEntity_ nestedEmbeddedEntity; + public EmbeddedEntityList_ embeddedEntityList; + + public FlattenedEmbeddedEntity_ flattenedEmbeddedEntity; + + // an extra _ since otherwise the cyclic nested property class will clash with the "previous one" + public Parent__ parent; + + private Parent_(String absolutePath) { + super( absolutePath ); + primitiveInteger = ValueFieldReference.of( absolutePath + ".primitiveInteger", Integer.class, Integer.class, + Integer.class ); + wrapperDouble = + ValueFieldReference.of( absolutePath + ".wrapperDouble", Double.class, Double.class, Double.class ); + string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + stringProjectedAsBytes = + ValueFieldReference.of( "stringProjectedAsBytes", String.class, String.class, byte[].class ); + localDate = ValueFieldReference.of( absolutePath + ".localDate", LocalDate.class, LocalDate.class, + LocalDate.class ); + vector = ValueFieldReference.of( absolutePath + ".vector", float[].class, float[].class, float[].class ); + stringList = ValueFieldReference.of( absolutePath + ".stringList", String.class, String.class, String.class ); + + flattenedEmbeddedEntity = new FlattenedEmbeddedEntity_( absolutePath + ".flattenedEmbeddedEntity" ); + nestedEmbeddedEntity = new NestedEmbeddedEntity_( absolutePath + ".nestedEmbeddedEntity" ); + embeddedEntityList = new EmbeddedEntityList_( absolutePath + ".embeddedEntityList" ); + + parent = new Parent__( absolutePath + ".parent" ); + } + + public static class NestedEmbeddedEntity_ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { + + public ValueFieldReference string; + public ValueFieldReference someEnum; + + private NestedEmbeddedEntity_(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.someEnum = + ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + } + } + + public static class EmbeddedEntityList_ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { + + public ValueFieldReference string; + public ValueFieldReference someEnum; + + private EmbeddedEntityList_(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.someEnum = + ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + } + } + + public static class FlattenedEmbeddedEntity_ extends ObjectFieldReferenceImpl { + + public ValueFieldReference string; + public ValueFieldReference someEnum; + + private FlattenedEmbeddedEntity_(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.someEnum = + ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + } + } + + public static class Parent__ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { + + public ValueFieldReference string; + public ValueFieldReference vector; + + private Parent__(String absolutePath) { + super( absolutePath ); + this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.vector = + ValueFieldReference.of( absolutePath + ".vector", float[].class, float[].class, float[].class ); + } + } + } + } + + // ================================================================================================================= + + private static class IndexBinding { + private static class IndexBindingFields { + IndexObjectFieldReference self; + + IndexFieldReference primitiveInteger; + IndexFieldReference wrapperDouble; + IndexFieldReference string; + IndexFieldReference stringProjectedAsBytes; + IndexFieldReference localDate; + IndexFieldReference stringList; + IndexFieldReference vector; + + IndexObjectFieldReference nestedEmbeddedEntity; + + IndexFieldReference nestedEmbeddedEntityString; + IndexFieldReference nestedEmbeddedEntityEnum; + + IndexObjectFieldReference flattenedEmbeddedEntity; + IndexFieldReference flattenedEmbeddedEntityString; + IndexFieldReference flattenedEmbeddedEntityEnum; + + IndexObjectFieldReference nestedEmbeddedListEntity; + IndexFieldReference nestedEmbeddedListEntityString; + IndexFieldReference nestedEmbeddedListEntityEnum; + + IndexBindingFields parent; + } + + IndexBindingFields fields; + + IndexBinding(IndexSchemaElement element) { + fields = indexedEntity( element ); + IndexSchemaObjectField parent = element.objectField( "parent", ObjectStructure.NESTED ); + + fields.parent = indexedEntity( parent ); + fields.parent.self = parent.toReference(); + + parent = parent.objectField( "parent", ObjectStructure.NESTED ); + + fields.parent.parent = indexedEntityWithExcludes( parent ); + fields.parent.parent.self = parent.toReference(); + + } + + IndexBindingFields indexedEntity(IndexSchemaElement element) { + IndexBindingFields fields = new IndexBindingFields(); + fields.primitiveInteger = + element.field( "primitiveInteger", f -> f.asInteger().projectable( Projectable.YES ) ).toReference(); + fields.wrapperDouble = + element.field( "wrapperDouble", f -> f.asDouble().projectable( Projectable.YES ) ).toReference(); + fields.string = element.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference(); + fields.stringProjectedAsBytes = + element.field( "stringProjectedAsBytes", f -> f.asString().projectable( Projectable.YES ) + .projectionConverter( byte[].class, StringConverter.INSTANCE ) ).toReference(); + fields.localDate = element.field( "localDate", f -> f.asLocalDate().projectable( Projectable.YES ) ).toReference(); + fields.stringList = + element.field( "stringList", f -> f.asString().projectable( Projectable.YES ) ).multiValued().toReference(); + fields.vector = element.field( "vector", f -> f.asFloatVector().dimension( 3 ).vectorSimilarity( VectorSimilarity.L2 ).projectable( Projectable.YES ) ) + .toReference(); + + + // EmbeddedEntity nestedEmbeddedEntity + IndexSchemaObjectField nestedEmbedded = element.objectField( "nestedEmbeddedEntity", ObjectStructure.NESTED ); + fields.nestedEmbeddedEntity = nestedEmbedded.toReference(); + fields.nestedEmbeddedEntityString = + nestedEmbedded.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference(); + + EnumConverter converter = new EnumConverter(); + fields.nestedEmbeddedEntityEnum = nestedEmbedded.field( + "someEnum", + f -> f.asString().projectable( Projectable.YES ).dslConverter( SomeEnum.class, converter ) + .projectionConverter( SomeEnum.class, converter ) + ).toReference(); + + // EmbeddedEntity flattenedEmbeddedEntity + IndexSchemaObjectField flattenedEmbedded = + element.objectField( "flattenedEmbeddedEntity", ObjectStructure.FLATTENED ); + fields.flattenedEmbeddedEntity = flattenedEmbedded.toReference(); + fields.flattenedEmbeddedEntityString = + flattenedEmbedded.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference(); + + fields.flattenedEmbeddedEntityEnum = flattenedEmbedded.field( "someEnum", + f -> f.asString().projectable( Projectable.YES ).dslConverter( SomeEnum.class, converter ) + .projectionConverter( SomeEnum.class, converter ) ) + .toReference(); + + + // List embeddedEntityList + IndexSchemaObjectField nestedEmbeddedList = + element.objectField( "embeddedEntityList", ObjectStructure.NESTED ).multiValued(); + fields.nestedEmbeddedListEntity = nestedEmbeddedList.toReference(); + fields.nestedEmbeddedListEntityString = + nestedEmbeddedList.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference(); + + fields.nestedEmbeddedListEntityEnum = nestedEmbeddedList.field( + "someEnum", + f -> f.asString().projectable( Projectable.YES ).dslConverter( SomeEnum.class, converter ) + .projectionConverter( SomeEnum.class, converter ) ) + .toReference(); + + return fields; + } + + IndexBindingFields indexedEntityWithExcludes(IndexSchemaElement element) { + IndexBindingFields fields = new IndexBindingFields(); + fields.string = element.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference(); + fields.vector = element.field( "vector", f -> f.asFloatVector().dimension( 3 ).vectorSimilarity( VectorSimilarity.L2 ).projectable( Projectable.YES ) ) + .toReference(); + return fields; + } + } + + public static final class DataSet extends AbstractPredicateDataSet { + + public DataSet() { + super( null ); + } + + public void contribute(SimpleMappedIndex index, BulkIndexer indexer) { + indexer.add( docId( 0 ), routingKey, document -> initDocument( index, document, 0 ) ); + indexer.add( docId( 1 ), routingKey, document -> initDocument( index, document, 1 ) ); + indexer.add( docId( 2 ), routingKey, document -> initDocument( index, document, 2 ) ); + } + + private void initDocument(SimpleMappedIndex index, DocumentElement document, int docOrdinal) { + IndexBinding binding = index.binding(); + + init( document, docOrdinal, binding.fields ); + + // first parent : + DocumentElement parent = document.addObject( binding.fields.parent.self ); + init( parent, docOrdinal, binding.fields.parent ); + + parent = parent.addObject( binding.fields.parent.parent.self ); + + parent.addValue( binding.fields.parent.parent.string, "string_" + docOrdinal ); + parent.addValue( binding.fields.parent.parent.vector, + new float[] { docOrdinal * 10.0f, docOrdinal * 100.0f, docOrdinal * 1000.0f } ); + } + + private static void init(DocumentElement document, int docOrdinal, IndexBinding.IndexBindingFields fields) { + document.addValue( fields.primitiveInteger, docOrdinal ); + document.addValue( fields.wrapperDouble, docOrdinal * 100.0 ); + document.addValue( fields.string, "string_" + docOrdinal ); + document.addValue( fields.stringProjectedAsBytes, "a_" + docOrdinal ); + document.addValue( fields.localDate, LocalDate.of( 2024, 1, docOrdinal + 1 ) ); + document.addValue( fields.stringList, "string_list_0_" + docOrdinal ); + document.addValue( fields.stringList, "string_list_1_" + docOrdinal ); + document.addValue( fields.stringList, "string_list_2_" + docOrdinal ); + document.addValue( fields.vector, new float[] { docOrdinal * 10.0f, docOrdinal * 100.0f, docOrdinal * 1000.0f } ); + + SomeEnum[] enums = SomeEnum.values(); + + DocumentElement nestedEmbeddedEntity = document.addObject( fields.nestedEmbeddedEntity ); + nestedEmbeddedEntity.addValue( fields.nestedEmbeddedEntityString, "string_n_" + docOrdinal ); + nestedEmbeddedEntity.addValue( fields.nestedEmbeddedEntityEnum, enums[docOrdinal % enums.length].name() ); + + DocumentElement flattenedEmbeddedEntity = document.addObject( fields.flattenedEmbeddedEntity ); + + flattenedEmbeddedEntity.addValue( fields.flattenedEmbeddedEntityString, "string_f_" + docOrdinal ); + flattenedEmbeddedEntity.addValue( fields.flattenedEmbeddedEntityEnum, enums[docOrdinal % enums.length].name() ); + + for ( int i = 0; i < 5; i++ ) { + DocumentElement element = document.addObject( fields.nestedEmbeddedListEntity ); + + element.addValue( fields.nestedEmbeddedListEntityString, "string_f_" + docOrdinal ); + element.addValue( fields.nestedEmbeddedListEntityEnum, enums[docOrdinal % enums.length].name() ); + } + } + } + + + private static class StringConverter implements FromDocumentValueConverter { + private static final StringConverter INSTANCE = new StringConverter(); + + @Override + public byte[] fromDocumentValue(String value, FromDocumentValueConvertContext context) { + return value == null ? null : value.getBytes( StandardCharsets.UTF_8 ); + } + } + + private static class EnumConverter + implements ToDocumentValueConverter, + FromDocumentValueConverter { + + @Override + public String toDocumentValue(SomeEnum value, ToDocumentValueConvertContext context) { + return value == null ? null : value.name(); + } + + @Override + public SomeEnum fromDocumentValue(String value, FromDocumentValueConvertContext context) { + return value == null ? null : SomeEnum.valueOf( value ); + } + } +} From 33d7e5bbc886a15d28680375d6c04a5d5b5920b3 Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Tue, 7 May 2024 08:19:11 +0200 Subject: [PATCH 2/3] HSEARCH-3319 WIP: a few changes --- .../elasticsearch/ElasticsearchExtension.java | 10 +- .../ElasticsearchSearchIndexScopeImpl.java | 12 +- ...ElasticsearchSearchAggregationFactory.java | 4 +- ...ticsearchSearchAggregationFactoryImpl.java | 18 +- .../ElasticsearchSearchPredicateFactory.java | 4 +- ...asticsearchSearchPredicateFactoryImpl.java | 11 +- .../impl/ElasticsearchNamedPredicate.java | 35 +-- .../ElasticsearchSearchQueryOptionsStep.java | 11 +- .../ElasticsearchSearchQuerySelectStep.java | 18 +- .../ElasticsearchSearchQueryWhereStep.java | 4 +- ...asticsearchSearchQueryOptionsStepImpl.java | 23 +- ...lasticsearchSearchQuerySelectStepImpl.java | 27 ++- .../ElasticsearchSearchQueryIndexScope.java | 6 +- .../dsl/ElasticsearchSearchSortFactory.java | 8 +- .../ElasticsearchSearchSortFactoryImpl.java | 23 +- .../backend/lucene/LuceneExtension.java | 14 +- .../impl/LuceneSearchIndexScopeImpl.java | 12 +- .../dsl/LuceneSearchAggregationFactory.java | 4 +- .../LuceneSearchAggregationFactoryImpl.java | 15 +- .../dsl/LuceneSearchPredicateFactory.java | 2 +- .../LuceneSearchPredicateFactoryImpl.java | 11 +- .../predicate/impl/LuceneNamedPredicate.java | 26 +-- .../dsl/LuceneSearchQueryOptionsStep.java | 9 +- .../dsl/LuceneSearchQuerySelectStep.java | 18 +- .../query/dsl/LuceneSearchQueryWhereStep.java | 4 +- .../LuceneSearchQueryOptionsStepImpl.java | 19 +- .../impl/LuceneSearchQuerySelectStepImpl.java | 26 +-- .../impl/LuceneSearchQueryIndexScope.java | 6 +- .../sort/dsl/LuceneSearchSortFactory.java | 8 +- .../dsl/impl/LuceneSearchSortFactoryImpl.java | 19 +- .../namedpredicate/SkuIdentifierBinder.java | 6 +- .../model/dsl/IndexSchemaElement.java | 4 +- .../scope/impl/MappedIndexScopeImpl.java | 2 +- .../mapper/scope/spi/MappedIndexScope.java | 4 +- .../dsl/AggregationFilterStep.java | 2 +- .../dsl/ExtendedSearchAggregationFactory.java | 11 +- .../dsl/RangeAggregationFieldStep.java | 6 +- .../dsl/RangeAggregationOptionsStep.java | 7 +- .../dsl/RangeAggregationRangeMoreStep.java | 11 +- .../dsl/RangeAggregationRangeStep.java | 5 +- .../dsl/SearchAggregationFactory.java | 8 +- .../SearchAggregationFactoryExtension.java | 2 +- .../dsl/TermsAggregationFieldStep.java | 6 +- .../dsl/TermsAggregationOptionsStep.java | 7 +- .../impl/RangeAggregationFieldStepImpl.java | 9 +- .../impl/RangeAggregationRangeStepImpl.java | 22 +- .../impl/TermsAggregationFieldStepImpl.java | 9 +- .../impl/TermsAggregationOptionsStepImpl.java | 24 +- .../WithParametersAggregationFinalStep.java | 4 +- .../spi/AbstractSearchAggregationFactory.java | 15 +- .../dsl/spi/SearchAggregationDslContext.java | 8 +- .../definition/PredicateDefinition.java | 4 +- .../PredicateDefinitionContext.java | 4 +- .../dsl/ExtendedSearchPredicateFactory.java | 4 +- .../predicate/dsl/KnnPredicateFieldStep.java | 8 +- .../dsl/KnnPredicateOptionsStep.java | 13 +- .../predicate/dsl/KnnPredicateVectorStep.java | 6 +- .../MatchPredicateFieldMoreGenericStep.java | 3 +- .../dsl/MatchPredicateFieldMoreStep.java | 5 +- .../dsl/MatchPredicateFieldStep.java | 10 +- .../predicate/dsl/SearchPredicateFactory.java | 6 +- .../dsl/SearchPredicateFactoryExtension.java | 2 +- .../AbstractMatchPredicateFieldMoreStep.java | 130 ++++++----- .../dsl/impl/KnnPredicateFieldStepImpl.java | 30 +-- .../dsl/impl/MatchPredicateFieldStepImpl.java | 10 +- .../spi/AbstractSearchPredicateFactory.java | 13 +- .../predicate/spi/NamedPredicateBuilder.java | 4 +- ...ValuesBasedPredicateDefinitionContext.java | 8 +- .../dsl/SearchProjectionFactory.java | 4 +- .../query/dsl/SearchQueryOptionsStep.java | 7 +- .../query/dsl/SearchQuerySelectStep.java | 18 +- .../query/dsl/SearchQueryWhereStep.java | 5 +- .../impl/DefaultSearchQueryOptionsStep.java | 24 +- .../impl/DefaultSearchQuerySelectStep.java | 26 +-- ...stractDelegatingSearchQuerySelectStep.java | 26 +-- ...bstractExtendedSearchQueryOptionsStep.java | 11 +- .../spi/AbstractSearchQueryOptionsStep.java | 11 +- .../spi/AbstractSearchQuerySelectStep.java | 4 +- .../query/spi/SearchQueryIndexScope.java | 6 +- .../reference/traits/FieldReference.java | 22 ++ .../ExistsPredicateFieldReference.java | 4 + .../predicate/KnnPredicateFieldReference.java | 4 + .../MatchPredicateFieldReference.java | 4 + .../predicate/PredicateFieldReference.java | 6 + .../TypedPredicateFieldReference.java | 13 ++ .../FieldProjectionFieldReference.java | 4 + .../projection/ProjectionFieldReference.java | 6 + .../TypedProjectionFieldReference.java | 12 + .../sort/dsl/CompositeSortComponentsStep.java | 4 +- .../sort/dsl/DistanceSortOptionsStep.java | 4 +- .../sort/dsl/ExtendedSearchSortFactory.java | 17 +- .../search/sort/dsl/FieldSortOptionsStep.java | 4 +- .../search/sort/dsl/ScoreSortOptionsStep.java | 4 +- .../search/sort/dsl/SearchSortFactory.java | 27 +-- .../sort/dsl/SearchSortFactoryExtension.java | 2 +- ...rtFactoryExtensionIfSupportedMoreStep.java | 6 +- ...chSortFactoryExtensionIfSupportedStep.java | 4 +- .../search/sort/dsl/SortFilterStep.java | 2 +- .../engine/search/sort/dsl/SortThenStep.java | 4 +- .../impl/CompositeSortComponentsStepImpl.java | 12 +- .../dsl/impl/DistanceSortOptionsStepImpl.java | 32 +-- .../dsl/impl/FieldSortOptionsStepImpl.java | 32 +-- .../dsl/impl/ScoreSortOptionsStepImpl.java | 10 +- .../impl/SearchSortFactoryExtensionStep.java | 22 +- .../dsl/impl/WithParametersSortFinalStep.java | 4 +- .../dsl/spi/AbstractSearchSortFactory.java | 39 ++-- .../sort/dsl/spi/AbstractSortThenStep.java | 12 +- .../sort/dsl/spi/SearchSortDslContext.java | 29 +-- .../sort/dsl/spi/StaticSortThenStep.java | 4 +- .../ElasticsearchExtensionIT.java | 16 +- .../ElasticsearchBoolSearchPredicateIT.java | 2 +- .../util/ElasticsearchTckBackendHelper.java | 3 +- .../backend/lucene/LuceneExtensionIT.java | 22 +- .../cache/LuceneQueryCacheConfigurerIT.java | 2 +- .../search/LuceneBoolSearchPredicateIT.java | 5 +- .../LuceneFloatingPointInfinitySearchIT.java | 2 +- .../LuceneSearchTopDocsMergeFieldSortIT.java | 4 +- .../util/LuceneTckBackendHelper.java | 3 +- .../tck/dynamic/ObjectFieldTemplateIT.java | 2 +- .../search/aggregation/AggregationBaseIT.java | 8 +- .../RangeAggregationSpecificsIT.java | 4 +- .../TermsAggregationSpecificsIT.java | 2 +- .../bool/BooleanSortAndRangePredicateIT.java | 4 +- ...bstractBaseQueryStringPredicateBaseIT.java | 28 +-- .../AbstractPredicateFieldScoreIT.java | 22 +- .../AbstractPredicateMultiFieldIT.java | 6 +- .../predicate/AbstractPredicateScoreIT.java | 8 +- .../AbstractPredicateSearchableIT.java | 2 +- .../AbstractPredicateSingleFieldIT.java | 4 +- ...tPredicateTypeCheckingAndConversionIT.java | 7 +- .../AbstractPredicateUnsupportedTypeIT.java | 5 +- .../search/predicate/AndPredicateBaseIT.java | 16 +- .../search/predicate/BoolPredicateBaseIT.java | 8 +- .../predicate/ExistsPredicateBaseIT.java | 14 +- .../ExistsPredicateObjectsBaseIT.java | 8 +- .../search/predicate/KnnPredicateBaseIT.java | 24 +- .../predicate/MatchAllPredicateBaseIT.java | 8 +- .../predicate/MatchIdPredicateBaseIT.java | 8 +- .../predicate/MatchPredicateBaseIT.java | 34 +-- .../predicate/NestedPredicateLegacyIT.java | 3 +- .../predicate/NestedPredicateSpecificsIT.java | 3 +- .../search/predicate/NotPredicateBaseIT.java | 8 +- .../predicate/NotPredicateSpecificsIT.java | 2 +- .../search/predicate/OrPredicateBaseIT.java | 16 +- .../predicate/PhrasePredicateBaseIT.java | 28 +-- .../predicate/RangePredicateBaseIT.java | 34 +-- .../predicate/RegexpPredicateBaseIT.java | 28 +-- ...atialWithinBoundingBoxPredicateBaseIT.java | 28 +-- .../SpatialWithinCirclePredicateBaseIT.java | 28 +-- .../SpatialWithinPolygonPredicateBaseIT.java | 28 +-- .../predicate/TermsPredicateBaseIT.java | 38 +-- .../predicate/WildcardPredicateBaseIT.java | 28 +-- ...ctDistanceProjectionMultiValuedBaseIT.java | 4 +- ...tDistanceProjectionSingleValuedBaseIT.java | 4 +- .../AbstractEntityProjectionIT.java | 2 +- .../AbstractEntityReferenceProjectionIT.java | 2 +- .../DistanceProjectionMultiValuedBaseIT.java | 4 +- ...eProjectionParameterMultiValuedBaseIT.java | 4 +- ...ProjectionParameterSingleValuedBaseIT.java | 4 +- .../DistanceProjectionSingleValuedBaseIT.java | 4 +- .../search/projection/EntityProjectionIT.java | 2 +- .../EntityReferenceProjectionIT.java | 2 +- .../tck/search/query/SearchQueryBaseIT.java | 8 +- .../tck/search/query/SearchQueryFetchIT.java | 10 +- .../tck/search/query/SearchQueryScrollIT.java | 10 +- .../tck/search/query/SearchQuerySelectIT.java | 12 +- .../search/query/SearchQueryTimeoutIT.java | 4 +- .../search/reference/FieldReferenceIT.java | 219 ++++++++++++++++-- .../tck/search/sort/CompositeSortIT.java | 4 +- .../sort/DistanceSortDynamicFieldIT.java | 6 +- .../DistanceSortFilteringSpecificsIT.java | 4 +- .../search/sort/DistanceSortSpecificsIT.java | 12 +- .../search/sort/FieldSortDynamicFieldIT.java | 4 +- .../sort/FieldSortFilteringSpecificsIT.java | 4 +- .../tck/search/sort/FieldSortSpecificsIT.java | 26 +-- .../FieldSortTypeCheckingAndConversionIT.java | 6 +- .../backend/tck/search/sort/SearchSortIT.java | 14 +- .../RangeAggregationDescriptor.java | 11 +- .../TermsAggregationDescriptor.java | 11 +- .../expectations/AggregationScenario.java | 9 +- ...tedSingleFieldAggregationExpectations.java | 3 +- .../testsupport/util/TckBackendHelper.java | 3 +- .../search/mapper/orm/scope/SearchScope.java | 6 +- .../impl/StubSearchAggregationFactory.java | 5 +- .../dsl/impl/StubSearchPredicateFactory.java | 8 +- .../sort/dsl/impl/StubSearchSortFactory.java | 5 +- .../mapper/stub/GenericStubMappingScope.java | 6 +- 187 files changed, 1328 insertions(+), 997 deletions(-) create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/FieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/ExistsPredicateFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/KnnPredicateFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/MatchPredicateFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/PredicateFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/TypedPredicateFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/FieldProjectionFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/ProjectionFieldReference.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/TypedProjectionFieldReference.java diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/ElasticsearchExtension.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/ElasticsearchExtension.java index a83e52d902c..f945957c38e 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/ElasticsearchExtension.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/ElasticsearchExtension.java @@ -67,10 +67,10 @@ public final class ElasticsearchExtension implements SearchQueryDslExtension, R, E, LOS>, SearchQueryExtension, H>, - SearchPredicateFactoryExtension, - SearchSortFactoryExtension, + SearchPredicateFactoryExtension>, + SearchSortFactoryExtension>, SearchProjectionFactoryExtension, R, E>, - SearchAggregationFactoryExtension, + SearchAggregationFactoryExtension>, IndexFieldTypeFactoryExtension, SchemaExportExtension { @@ -181,8 +181,8 @@ public Optional> extendOptional(Searc * {@inheritDoc} */ @Override - public Optional extendOptional( - SearchAggregationFactory original) { + public Optional> extendOptional( + SearchAggregationFactory original) { if ( original instanceof ElasticsearchSearchAggregationFactory ) { return Optional.of( (ElasticsearchSearchAggregationFactory) original ); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/scope/model/impl/ElasticsearchSearchIndexScopeImpl.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/scope/model/impl/ElasticsearchSearchIndexScopeImpl.java index de93a2c38dd..0671ff268d2 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/scope/model/impl/ElasticsearchSearchIndexScopeImpl.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/scope/model/impl/ElasticsearchSearchIndexScopeImpl.java @@ -173,13 +173,13 @@ public

ElasticsearchSearchQueryBuilder

select(BackendSessionContext sessi } @Override - public ElasticsearchSearchPredicateFactory predicateFactory() { - return new ElasticsearchSearchPredicateFactoryImpl( SearchPredicateDslContext.root( this ) ); + public ElasticsearchSearchPredicateFactory predicateFactory() { + return new ElasticsearchSearchPredicateFactoryImpl<>( SearchPredicateDslContext.root( this ) ); } @Override - public ElasticsearchSearchSortFactory sortFactory() { - return new ElasticsearchSearchSortFactoryImpl( SearchSortDslContext + public ElasticsearchSearchSortFactory sortFactory() { + return new ElasticsearchSearchSortFactoryImpl<>( SearchSortDslContext .root( this, ElasticsearchSearchSortFactoryImpl::new, predicateFactory() ) ); } @@ -189,8 +189,8 @@ public ElasticsearchSearchProjectionFactory projectionFactory() { } @Override - public ElasticsearchSearchAggregationFactory aggregationFactory() { - return new ElasticsearchSearchAggregationFactoryImpl( SearchAggregationDslContext.root( this, predicateFactory() ) ); + public ElasticsearchSearchAggregationFactory aggregationFactory() { + return new ElasticsearchSearchAggregationFactoryImpl<>( SearchAggregationDslContext.root( this, predicateFactory() ) ); } @Override diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/ElasticsearchSearchAggregationFactory.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/ElasticsearchSearchAggregationFactory.java index f77036831ee..b6683a9cf95 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/ElasticsearchSearchAggregationFactory.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/ElasticsearchSearchAggregationFactory.java @@ -12,8 +12,8 @@ import com.google.gson.JsonObject; -public interface ElasticsearchSearchAggregationFactory - extends ExtendedSearchAggregationFactory { +public interface ElasticsearchSearchAggregationFactory + extends ExtendedSearchAggregationFactory, ElasticsearchSearchPredicateFactory> { /** * Create an aggregation from JSON. diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/impl/ElasticsearchSearchAggregationFactoryImpl.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/impl/ElasticsearchSearchAggregationFactoryImpl.java index 5ad2694bf91..933d0269a4c 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/impl/ElasticsearchSearchAggregationFactoryImpl.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/aggregation/dsl/impl/ElasticsearchSearchAggregationFactoryImpl.java @@ -15,22 +15,24 @@ import com.google.gson.JsonObject; -public class ElasticsearchSearchAggregationFactoryImpl +public class ElasticsearchSearchAggregationFactoryImpl extends AbstractSearchAggregationFactory< - ElasticsearchSearchAggregationFactory, + E, + ElasticsearchSearchAggregationFactory, ElasticsearchSearchAggregationIndexScope, - ElasticsearchSearchPredicateFactory> - implements ElasticsearchSearchAggregationFactory { + ElasticsearchSearchPredicateFactory> + implements ElasticsearchSearchAggregationFactory { public ElasticsearchSearchAggregationFactoryImpl( - SearchAggregationDslContext, - ElasticsearchSearchPredicateFactory> dslContext) { + SearchAggregationDslContext, + ElasticsearchSearchPredicateFactory> dslContext) { super( dslContext ); } @Override - public ElasticsearchSearchAggregationFactory withRoot(String objectFieldPath) { - return new ElasticsearchSearchAggregationFactoryImpl( dslContext.rescope( + public ElasticsearchSearchAggregationFactory withRoot(String objectFieldPath) { + return new ElasticsearchSearchAggregationFactoryImpl<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ), dslContext.predicateFactory().withRoot( objectFieldPath ) ) ); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/ElasticsearchSearchPredicateFactory.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/ElasticsearchSearchPredicateFactory.java index 4a1a7ba7580..575350a2c00 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/ElasticsearchSearchPredicateFactory.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/ElasticsearchSearchPredicateFactory.java @@ -14,8 +14,8 @@ /** * A factory for search predicates with some Elasticsearch-specific methods. */ -public interface ElasticsearchSearchPredicateFactory - extends ExtendedSearchPredicateFactory { +public interface ElasticsearchSearchPredicateFactory + extends ExtendedSearchPredicateFactory> { /** * Create a predicate from JSON. diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/impl/ElasticsearchSearchPredicateFactoryImpl.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/impl/ElasticsearchSearchPredicateFactoryImpl.java index c859a4c97bf..3a6505072b4 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/impl/ElasticsearchSearchPredicateFactoryImpl.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/dsl/impl/ElasticsearchSearchPredicateFactoryImpl.java @@ -15,11 +15,12 @@ import com.google.gson.JsonObject; -public class ElasticsearchSearchPredicateFactoryImpl +public class ElasticsearchSearchPredicateFactoryImpl extends AbstractSearchPredicateFactory< - ElasticsearchSearchPredicateFactory, + E, + ElasticsearchSearchPredicateFactory, ElasticsearchSearchPredicateIndexScope> - implements ElasticsearchSearchPredicateFactory { + implements ElasticsearchSearchPredicateFactory { public ElasticsearchSearchPredicateFactoryImpl( SearchPredicateDslContext> dslContext) { @@ -27,8 +28,8 @@ public ElasticsearchSearchPredicateFactoryImpl( } @Override - public ElasticsearchSearchPredicateFactory withRoot(String objectFieldPath) { - return new ElasticsearchSearchPredicateFactoryImpl( dslContext.rescope( + public ElasticsearchSearchPredicateFactory withRoot(String objectFieldPath) { + return new ElasticsearchSearchPredicateFactoryImpl<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ) ) ); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/impl/ElasticsearchNamedPredicate.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/impl/ElasticsearchNamedPredicate.java index 11b86904dfc..c203a3f630c 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/impl/ElasticsearchNamedPredicate.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/predicate/impl/ElasticsearchNamedPredicate.java @@ -24,13 +24,13 @@ import com.google.gson.JsonObject; -public class ElasticsearchNamedPredicate extends AbstractElasticsearchSingleFieldPredicate { +public class ElasticsearchNamedPredicate extends AbstractElasticsearchSingleFieldPredicate { private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); private final ElasticsearchSearchPredicate providedPredicate; - private ElasticsearchNamedPredicate(Builder builder, ElasticsearchSearchPredicate providedPredicate) { + private ElasticsearchNamedPredicate(Builder builder, ElasticsearchSearchPredicate providedPredicate) { super( builder ); this.providedPredicate = providedPredicate; } @@ -47,12 +47,12 @@ protected JsonObject doToJsonQuery(PredicateRequestContext context, return providedPredicate.toJsonQuery( context ); } - public static class Factory - extends AbstractElasticsearchCompositeNodeSearchQueryElementFactory { - private final PredicateDefinition definition; + public static class Factory + extends AbstractElasticsearchCompositeNodeSearchQueryElementFactory> { + private final PredicateDefinition definition; private final String predicateName; - public Factory(PredicateDefinition definition, String predicateName) { + public Factory(PredicateDefinition definition, String predicateName) { this.definition = definition; this.predicateName = predicateName; } @@ -60,27 +60,27 @@ public Factory(PredicateDefinition definition, String predicateName) { @Override public void checkCompatibleWith(SearchQueryElementFactory other) { super.checkCompatibleWith( other ); - Factory castedOther = (Factory) other; + Factory castedOther = (Factory) other; if ( !definition.equals( castedOther.definition ) ) { throw log.differentPredicateDefinitionForQueryElement( definition, castedOther.definition ); } } @Override - public NamedPredicateBuilder create(ElasticsearchSearchIndexScope scope, + public NamedPredicateBuilder create(ElasticsearchSearchIndexScope scope, ElasticsearchSearchIndexCompositeNodeContext node) { - return new Builder( definition, predicateName, scope, node ); + return new Builder<>( definition, predicateName, scope, node ); } } - private static class Builder extends AbstractBuilder implements NamedPredicateBuilder { - private final PredicateDefinition definition; + private static class Builder extends AbstractBuilder implements NamedPredicateBuilder { + private final PredicateDefinition definition; private final String predicateName; private final ElasticsearchSearchIndexCompositeNodeContext field; - private SearchPredicateFactory factory; + private SearchPredicateFactory factory; private final Map params = new LinkedHashMap<>(); - Builder(PredicateDefinition definition, String predicateName, + Builder(PredicateDefinition definition, String predicateName, ElasticsearchSearchIndexScope scope, ElasticsearchSearchIndexCompositeNodeContext node) { super( scope, node ); @@ -90,7 +90,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu } @Override - public void factory(SearchPredicateFactory factory) { + public void factory(SearchPredicateFactory factory) { this.factory = factory; } @@ -101,13 +101,14 @@ public void param(String name, Object value) { @Override public SearchPredicate build() { - NamedValuesBasedPredicateDefinitionContext ctx = new NamedValuesBasedPredicateDefinitionContext( factory, params, - name -> log.paramNotDefined( name, predicateName, field.eventContext() ) ); + NamedValuesBasedPredicateDefinitionContext ctx = + new NamedValuesBasedPredicateDefinitionContext<>( factory, params, + name -> log.paramNotDefined( name, predicateName, field.eventContext() ) ); ElasticsearchSearchPredicate providedPredicate = ElasticsearchSearchPredicate.from( scope, definition.create( ctx ) ); - return new ElasticsearchNamedPredicate( this, providedPredicate ); + return new ElasticsearchNamedPredicate<>( this, providedPredicate ); } } } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryOptionsStep.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryOptionsStep.java index 27b67a55261..13667175157 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryOptionsStep.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryOptionsStep.java @@ -14,13 +14,14 @@ import org.hibernate.search.engine.search.query.dsl.SearchQueryOptionsStep; import org.hibernate.search.util.common.annotation.Incubating; -public interface ElasticsearchSearchQueryOptionsStep +public interface ElasticsearchSearchQueryOptionsStep extends SearchQueryOptionsStep< - ElasticsearchSearchQueryOptionsStep, + E, + ElasticsearchSearchQueryOptionsStep, H, LOS, - ElasticsearchSearchSortFactory, - ElasticsearchSearchAggregationFactory>, + ElasticsearchSearchSortFactory, + ElasticsearchSearchAggregationFactory>, ElasticsearchSearchFetchable { /** @@ -36,7 +37,7 @@ public interface ElasticsearchSearchQueryOptionsStep * @return {@code this}, for method chaining. */ @Incubating - ElasticsearchSearchQueryOptionsStep requestTransformer(ElasticsearchSearchRequestTransformer transformer); + ElasticsearchSearchQueryOptionsStep requestTransformer(ElasticsearchSearchRequestTransformer transformer); @Override ElasticsearchSearchQuery toQuery(); diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQuerySelectStep.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQuerySelectStep.java index 86802744b74..1ef091bc73b 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQuerySelectStep.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQuerySelectStep.java @@ -17,32 +17,32 @@ public interface ElasticsearchSearchQuerySelectStep extends SearchQuerySelectStep< - ElasticsearchSearchQueryOptionsStep, + ElasticsearchSearchQueryOptionsStep, R, E, LOS, ElasticsearchSearchProjectionFactory, - ElasticsearchSearchPredicateFactory>, - ElasticsearchSearchQueryWhereStep { + ElasticsearchSearchPredicateFactory>, + ElasticsearchSearchQueryWhereStep { @Override - ElasticsearchSearchQueryWhereStep selectEntity(); + ElasticsearchSearchQueryWhereStep selectEntity(); @Override - ElasticsearchSearchQueryWhereStep selectEntityReference(); + ElasticsearchSearchQueryWhereStep selectEntityReference(); @Override -

ElasticsearchSearchQueryWhereStep select(Class

objectClass); +

ElasticsearchSearchQueryWhereStep select(Class

objectClass); @Override -

ElasticsearchSearchQueryWhereStep select( +

ElasticsearchSearchQueryWhereStep select( Function, ? extends ProjectionFinalStep

> projectionContributor); @Override -

ElasticsearchSearchQueryWhereStep select(SearchProjection

projection); +

ElasticsearchSearchQueryWhereStep select(SearchProjection

projection); @Override - ElasticsearchSearchQueryWhereStep, LOS> select(SearchProjection... projections); + ElasticsearchSearchQueryWhereStep, LOS> select(SearchProjection... projections); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryWhereStep.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryWhereStep.java index 2da5965258d..f9bef946a2e 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryWhereStep.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/ElasticsearchSearchQueryWhereStep.java @@ -9,7 +9,7 @@ import org.hibernate.search.backend.elasticsearch.search.predicate.dsl.ElasticsearchSearchPredicateFactory; import org.hibernate.search.engine.search.query.dsl.SearchQueryWhereStep; -public interface ElasticsearchSearchQueryWhereStep - extends SearchQueryWhereStep, H, LOS, ElasticsearchSearchPredicateFactory> { +public interface ElasticsearchSearchQueryWhereStep + extends SearchQueryWhereStep, H, LOS, ElasticsearchSearchPredicateFactory> { } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQueryOptionsStepImpl.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQueryOptionsStepImpl.java index 293980d5598..f64b814bf2e 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQueryOptionsStepImpl.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQueryOptionsStepImpl.java @@ -21,18 +21,19 @@ import org.hibernate.search.engine.search.loading.spi.SearchLoadingContextBuilder; import org.hibernate.search.engine.search.query.dsl.spi.AbstractExtendedSearchQueryOptionsStep; -class ElasticsearchSearchQueryOptionsStepImpl +class ElasticsearchSearchQueryOptionsStepImpl extends AbstractExtendedSearchQueryOptionsStep< - ElasticsearchSearchQueryOptionsStep, + E, + ElasticsearchSearchQueryOptionsStep, H, ElasticsearchSearchResult, ElasticsearchSearchScroll, LOS, - ElasticsearchSearchPredicateFactory, - ElasticsearchSearchSortFactory, - ElasticsearchSearchAggregationFactory, + ElasticsearchSearchPredicateFactory, + ElasticsearchSearchSortFactory, + ElasticsearchSearchAggregationFactory, ElasticsearchSearchQueryIndexScope> - implements ElasticsearchSearchQueryWhereStep, ElasticsearchSearchQueryOptionsStep { + implements ElasticsearchSearchQueryWhereStep, ElasticsearchSearchQueryOptionsStep { private final ElasticsearchSearchQueryBuilder searchQueryBuilder; @@ -44,7 +45,7 @@ class ElasticsearchSearchQueryOptionsStepImpl } @Override - public ElasticsearchSearchQueryOptionsStep requestTransformer(ElasticsearchSearchRequestTransformer transformer) { + public ElasticsearchSearchQueryOptionsStep requestTransformer(ElasticsearchSearchRequestTransformer transformer) { searchQueryBuilder.requestTransformer( transformer ); return thisAsS(); } @@ -55,22 +56,22 @@ public ElasticsearchSearchQuery toQuery() { } @Override - protected ElasticsearchSearchQueryOptionsStepImpl thisAsS() { + protected ElasticsearchSearchQueryOptionsStepImpl thisAsS() { return this; } @Override - protected ElasticsearchSearchPredicateFactory predicateFactory() { + protected ElasticsearchSearchPredicateFactory predicateFactory() { return scope.predicateFactory(); } @Override - protected ElasticsearchSearchSortFactory sortFactory() { + protected ElasticsearchSearchSortFactory sortFactory() { return scope.sortFactory(); } @Override - protected ElasticsearchSearchAggregationFactory aggregationFactory() { + protected ElasticsearchSearchAggregationFactory aggregationFactory() { return scope.aggregationFactory(); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQuerySelectStepImpl.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQuerySelectStepImpl.java index 74641e6b039..f804934629b 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQuerySelectStepImpl.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/dsl/impl/ElasticsearchSearchQuerySelectStepImpl.java @@ -31,12 +31,12 @@ public class ElasticsearchSearchQuerySelectStepImpl extends AbstractSearchQuerySelectStep< - ElasticsearchSearchQueryOptionsStep, + ElasticsearchSearchQueryOptionsStep, R, E, LOS, ElasticsearchSearchProjectionFactory, - ElasticsearchSearchPredicateFactory> + ElasticsearchSearchPredicateFactory> implements ElasticsearchSearchQuerySelectStep { private final ElasticsearchSearchQueryIndexScope scope; @@ -52,22 +52,22 @@ public ElasticsearchSearchQuerySelectStepImpl(ElasticsearchSearchQueryIndexScope } @Override - public ElasticsearchSearchQueryWhereStep selectEntity() { + public ElasticsearchSearchQueryWhereStep selectEntity() { return select( scope.projectionFactory().entity().toProjection() ); } @Override - public ElasticsearchSearchQueryWhereStep selectEntityReference() { + public ElasticsearchSearchQueryWhereStep selectEntityReference() { return select( scope.projectionBuilders().entityReference() ); } @Override - public

ElasticsearchSearchQueryWhereStep select(Class

objectClass) { + public

ElasticsearchSearchQueryWhereStep select(Class

objectClass) { return select( scope.projectionFactory().composite().as( objectClass ).toProjection() ); } @Override - public

ElasticsearchSearchQueryWhereStep select( + public

ElasticsearchSearchQueryWhereStep select( Function, ? extends ProjectionFinalStep

> projectionContributor) { SearchProjection

projection = projectionContributor.apply( scope.projectionFactory() ).toProjection(); @@ -75,34 +75,33 @@ public

ElasticsearchSearchQueryWhereStep select( } @Override - public

ElasticsearchSearchQueryWhereStep select(SearchProjection

projection) { + public

ElasticsearchSearchQueryWhereStep select(SearchProjection

projection) { ElasticsearchSearchQueryBuilder

builder = scope.select( sessionContext, loadingContextBuilder, projection ); return new ElasticsearchSearchQueryOptionsStepImpl<>( scope, builder, loadingContextBuilder ); } @Override - public ElasticsearchSearchQueryWhereStep, LOS> select(SearchProjection... projections) { + public ElasticsearchSearchQueryWhereStep, LOS> select(SearchProjection... projections) { return select( scope.projectionBuilders().composite() .build( projections, ProjectionCompositor.fromList( projections.length ), ProjectionAccumulator.single() ) ); } @Override - public ElasticsearchSearchQueryOptionsStep where(SearchPredicate predicate) { + public ElasticsearchSearchQueryOptionsStep where(SearchPredicate predicate) { return selectEntity().where( predicate ); } @Override - public ElasticsearchSearchQueryOptionsStep where( - Function predicateContributor) { + public ElasticsearchSearchQueryOptionsStep where( + Function, ? extends PredicateFinalStep> predicateContributor) { return selectEntity().where( predicateContributor ); } @Override - public ElasticsearchSearchQueryOptionsStep where( - BiConsumer> predicateContributor) { + public ElasticsearchSearchQueryOptionsStep where(BiConsumer, + ? super SimpleBooleanPredicateClausesCollector> predicateContributor) { return selectEntity().where( predicateContributor ); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/impl/ElasticsearchSearchQueryIndexScope.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/impl/ElasticsearchSearchQueryIndexScope.java index 80142524b24..aaff7cbb067 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/impl/ElasticsearchSearchQueryIndexScope.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/query/impl/ElasticsearchSearchQueryIndexScope.java @@ -29,15 +29,15 @@

ElasticsearchSearchQueryBuilder

select(BackendSessionContext sessionConte SearchLoadingContextBuilder loadingContextBuilder, SearchProjection

projection); @Override - ElasticsearchSearchPredicateFactory predicateFactory(); + ElasticsearchSearchPredicateFactory predicateFactory(); @Override - ElasticsearchSearchSortFactory sortFactory(); + ElasticsearchSearchSortFactory sortFactory(); @Override ElasticsearchSearchProjectionFactory projectionFactory(); @Override - ElasticsearchSearchAggregationFactory aggregationFactory(); + ElasticsearchSearchAggregationFactory aggregationFactory(); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/ElasticsearchSearchSortFactory.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/ElasticsearchSearchSortFactory.java index 7461f8a6e61..ab64596b7c4 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/ElasticsearchSearchSortFactory.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/ElasticsearchSearchSortFactory.java @@ -15,8 +15,8 @@ /** * A factory for search sorts with some Elasticsearch-specific methods. */ -public interface ElasticsearchSearchSortFactory - extends ExtendedSearchSortFactory { +public interface ElasticsearchSearchSortFactory + extends ExtendedSearchSortFactory, ElasticsearchSearchPredicateFactory> { /** * Order elements according to a JSON sort definition. @@ -27,7 +27,7 @@ public interface ElasticsearchSearchSortFactory * @return A {@link SortThenStep} allowing the retrieval of the sort * or the chaining of other sorts. */ - SortThenStep fromJson(String jsonString); + SortThenStep fromJson(String jsonString); /** * Order elements according to a JSON sort definition. @@ -38,6 +38,6 @@ public interface ElasticsearchSearchSortFactory * @return A {@link SortThenStep} allowing the retrieval of the sort * or the chaining of other sorts. */ - SortThenStep fromJson(JsonObject jsonObject); + SortThenStep fromJson(JsonObject jsonObject); } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/impl/ElasticsearchSearchSortFactoryImpl.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/impl/ElasticsearchSearchSortFactoryImpl.java index 8905918141f..ca2dd5fba56 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/impl/ElasticsearchSearchSortFactoryImpl.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/sort/dsl/impl/ElasticsearchSearchSortFactoryImpl.java @@ -17,36 +17,37 @@ import com.google.gson.JsonObject; -public class ElasticsearchSearchSortFactoryImpl +public class ElasticsearchSearchSortFactoryImpl extends AbstractSearchSortFactory< - ElasticsearchSearchSortFactory, + E, + ElasticsearchSearchSortFactory, ElasticsearchSearchSortIndexScope, - ElasticsearchSearchPredicateFactory> - implements ElasticsearchSearchSortFactory { + ElasticsearchSearchPredicateFactory> + implements ElasticsearchSearchSortFactory { public ElasticsearchSearchSortFactoryImpl( - SearchSortDslContext, ElasticsearchSearchPredicateFactory> dslContext) { + SearchSortDslContext, ElasticsearchSearchPredicateFactory> dslContext) { super( dslContext ); } @Override - public ElasticsearchSearchSortFactory withRoot(String objectFieldPath) { - return new ElasticsearchSearchSortFactoryImpl( dslContext.rescope( + public ElasticsearchSearchSortFactory withRoot(String objectFieldPath) { + return new ElasticsearchSearchSortFactoryImpl<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ), dslContext.predicateFactory().withRoot( objectFieldPath ) ) ); } @Override - public SortThenStep fromJson(JsonObject jsonObject) { + public SortThenStep fromJson(JsonObject jsonObject) { return staticThenStep( dslContext.scope().sortBuilders().fromJson( jsonObject ) ); } @Override - public SortThenStep fromJson(String jsonString) { + public SortThenStep fromJson(String jsonString) { return staticThenStep( dslContext.scope().sortBuilders().fromJson( jsonString ) ); } - private SortThenStep staticThenStep(ElasticsearchSearchSort sort) { - return new StaticSortThenStep( dslContext, sort ); + private SortThenStep staticThenStep(ElasticsearchSearchSort sort) { + return new StaticSortThenStep<>( dslContext, sort ); } } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/LuceneExtension.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/LuceneExtension.java index 094730a5cd0..2b434ce80f8 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/LuceneExtension.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/LuceneExtension.java @@ -70,10 +70,10 @@ public final class LuceneExtension implements SearchQueryDslExtension, R, E, LOS>, SearchQueryExtension, H>, - SearchPredicateFactoryExtension, - SearchSortFactoryExtension, + SearchPredicateFactoryExtension>, + SearchSortFactoryExtension>, SearchProjectionFactoryExtension, R, E>, - SearchAggregationFactoryExtension, + SearchAggregationFactoryExtension>, IndexFieldTypeFactoryExtension, IndexScopeExtension, SchemaExportExtension { @@ -145,7 +145,7 @@ public Optional> extendOptional(SearchQuery original, * {@inheritDoc} */ @Override - public Optional extendOptional(SearchPredicateFactory original) { + public Optional> extendOptional(SearchPredicateFactory original) { if ( original instanceof LuceneSearchPredicateFactory ) { return Optional.of( (LuceneSearchPredicateFactory) original ); } @@ -158,8 +158,8 @@ public Optional extendOptional(SearchPredicateFact * {@inheritDoc} */ @Override - public Optional extendOptional( - SearchSortFactory original) { + public Optional> extendOptional( + SearchSortFactory original) { if ( original instanceof LuceneSearchSortFactory ) { return Optional.of( (LuceneSearchSortFactory) original ); } @@ -185,7 +185,7 @@ public Optional> extendOptional(SearchProjec * {@inheritDoc} */ @Override - public Optional extendOptional(SearchAggregationFactory original) { + public Optional> extendOptional(SearchAggregationFactory original) { if ( original instanceof LuceneSearchAggregationFactory ) { return Optional.of( (LuceneSearchAggregationFactory) original ); } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/scope/model/impl/LuceneSearchIndexScopeImpl.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/scope/model/impl/LuceneSearchIndexScopeImpl.java index f5bd8d2f77b..51ee7a86a07 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/scope/model/impl/LuceneSearchIndexScopeImpl.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/scope/model/impl/LuceneSearchIndexScopeImpl.java @@ -164,13 +164,13 @@ public

LuceneSearchQueryBuilder

select(BackendSessionContext sessionConte } @Override - public LuceneSearchPredicateFactory predicateFactory() { - return new LuceneSearchPredicateFactoryImpl( SearchPredicateDslContext.root( this ) ); + public LuceneSearchPredicateFactory predicateFactory() { + return new LuceneSearchPredicateFactoryImpl<>( SearchPredicateDslContext.root( this ) ); } @Override - public LuceneSearchSortFactory sortFactory() { - return new LuceneSearchSortFactoryImpl( SearchSortDslContext + public LuceneSearchSortFactory sortFactory() { + return new LuceneSearchSortFactoryImpl<>( SearchSortDslContext .root( this, LuceneSearchSortFactoryImpl::new, predicateFactory() ) ); } @@ -180,8 +180,8 @@ public LuceneSearchProjectionFactory projectionFactory() { } @Override - public LuceneSearchAggregationFactory aggregationFactory() { - return new LuceneSearchAggregationFactoryImpl( SearchAggregationDslContext.root( this, predicateFactory() ) ); + public LuceneSearchAggregationFactory aggregationFactory() { + return new LuceneSearchAggregationFactoryImpl<>( SearchAggregationDslContext.root( this, predicateFactory() ) ); } @Override diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/LuceneSearchAggregationFactory.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/LuceneSearchAggregationFactory.java index 3beef195363..914a2cf97d3 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/LuceneSearchAggregationFactory.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/LuceneSearchAggregationFactory.java @@ -9,7 +9,7 @@ import org.hibernate.search.backend.lucene.search.predicate.dsl.LuceneSearchPredicateFactory; import org.hibernate.search.engine.search.aggregation.dsl.ExtendedSearchAggregationFactory; -public interface LuceneSearchAggregationFactory - extends ExtendedSearchAggregationFactory { +public interface LuceneSearchAggregationFactory + extends ExtendedSearchAggregationFactory, LuceneSearchPredicateFactory> { } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/impl/LuceneSearchAggregationFactoryImpl.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/impl/LuceneSearchAggregationFactoryImpl.java index 2d6caef33b0..0e5fd3ff0fb 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/impl/LuceneSearchAggregationFactoryImpl.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/impl/LuceneSearchAggregationFactoryImpl.java @@ -12,21 +12,22 @@ import org.hibernate.search.engine.search.aggregation.dsl.spi.AbstractSearchAggregationFactory; import org.hibernate.search.engine.search.aggregation.dsl.spi.SearchAggregationDslContext; -public class LuceneSearchAggregationFactoryImpl +public class LuceneSearchAggregationFactoryImpl extends AbstractSearchAggregationFactory< - LuceneSearchAggregationFactory, + E, + LuceneSearchAggregationFactory, LuceneSearchAggregationIndexScope, - LuceneSearchPredicateFactory> - implements LuceneSearchAggregationFactory { + LuceneSearchPredicateFactory> + implements LuceneSearchAggregationFactory { public LuceneSearchAggregationFactoryImpl( - SearchAggregationDslContext, LuceneSearchPredicateFactory> dslContext) { + SearchAggregationDslContext, LuceneSearchPredicateFactory> dslContext) { super( dslContext ); } @Override - public LuceneSearchAggregationFactory withRoot(String objectFieldPath) { - return new LuceneSearchAggregationFactoryImpl( dslContext.rescope( + public LuceneSearchAggregationFactory withRoot(String objectFieldPath) { + return new LuceneSearchAggregationFactoryImpl<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ), dslContext.predicateFactory().withRoot( objectFieldPath ) ) ); } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/LuceneSearchPredicateFactory.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/LuceneSearchPredicateFactory.java index d3d546e5daa..8dc3b263162 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/LuceneSearchPredicateFactory.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/LuceneSearchPredicateFactory.java @@ -14,7 +14,7 @@ /** * A factory for search predicates with some Lucene-specific methods. */ -public interface LuceneSearchPredicateFactory extends ExtendedSearchPredicateFactory { +public interface LuceneSearchPredicateFactory extends ExtendedSearchPredicateFactory> { /** * Create a predicate from a Lucene {@link Query}. diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/impl/LuceneSearchPredicateFactoryImpl.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/impl/LuceneSearchPredicateFactoryImpl.java index 6bd39de54b9..030cb8680d0 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/impl/LuceneSearchPredicateFactoryImpl.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/impl/LuceneSearchPredicateFactoryImpl.java @@ -15,19 +15,20 @@ import org.apache.lucene.search.Query; -public class LuceneSearchPredicateFactoryImpl +public class LuceneSearchPredicateFactoryImpl extends AbstractSearchPredicateFactory< - LuceneSearchPredicateFactory, + E, + LuceneSearchPredicateFactory, LuceneSearchPredicateIndexScope> - implements LuceneSearchPredicateFactory { + implements LuceneSearchPredicateFactory { public LuceneSearchPredicateFactoryImpl(SearchPredicateDslContext> dslContext) { super( dslContext ); } @Override - public LuceneSearchPredicateFactory withRoot(String objectFieldPath) { - return new LuceneSearchPredicateFactoryImpl( dslContext.rescope( + public LuceneSearchPredicateFactory withRoot(String objectFieldPath) { + return new LuceneSearchPredicateFactoryImpl<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ) ) ); } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/impl/LuceneNamedPredicate.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/impl/LuceneNamedPredicate.java index 81137bb0e7e..8ec2ef9c670 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/impl/LuceneNamedPredicate.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/impl/LuceneNamedPredicate.java @@ -46,12 +46,12 @@ protected Query doToQuery(PredicateRequestContext context) { return instance.toQuery( context ); } - public static class Factory - extends AbstractLuceneCompositeNodeSearchQueryElementFactory { - private final PredicateDefinition definition; + public static class Factory + extends AbstractLuceneCompositeNodeSearchQueryElementFactory> { + private final PredicateDefinition definition; private final String predicateName; - public Factory(PredicateDefinition definition, String predicateName) { + public Factory(PredicateDefinition definition, String predicateName) { this.definition = definition; this.predicateName = predicateName; } @@ -59,27 +59,27 @@ public Factory(PredicateDefinition definition, String predicateName) { @Override public void checkCompatibleWith(SearchQueryElementFactory other) { super.checkCompatibleWith( other ); - Factory castedOther = (Factory) other; + Factory castedOther = (Factory) other; if ( !definition.equals( castedOther.definition ) ) { throw log.differentPredicateDefinitionForQueryElement( definition, castedOther.definition ); } } @Override - public NamedPredicateBuilder create(LuceneSearchIndexScope scope, + public NamedPredicateBuilder create(LuceneSearchIndexScope scope, LuceneSearchIndexCompositeNodeContext node) { - return new Builder( definition, predicateName, scope, node ); + return new Builder<>( definition, predicateName, scope, node ); } } - private static class Builder extends AbstractBuilder implements NamedPredicateBuilder { - private final PredicateDefinition definition; + private static class Builder extends AbstractBuilder implements NamedPredicateBuilder { + private final PredicateDefinition definition; private final String predicateName; private final LuceneSearchIndexCompositeNodeContext field; - private SearchPredicateFactory factory; + private SearchPredicateFactory factory; private final Map params = new LinkedHashMap<>(); - Builder(PredicateDefinition definition, String predicateName, LuceneSearchIndexScope scope, + Builder(PredicateDefinition definition, String predicateName, LuceneSearchIndexScope scope, LuceneSearchIndexCompositeNodeContext node) { super( scope, node ); this.definition = definition; @@ -88,7 +88,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu } @Override - public void factory(SearchPredicateFactory factory) { + public void factory(SearchPredicateFactory factory) { this.factory = factory; } @@ -99,7 +99,7 @@ public void param(String name, Object value) { @Override public SearchPredicate build() { - NamedValuesBasedPredicateDefinitionContext ctx = new NamedValuesBasedPredicateDefinitionContext( factory, params, + NamedValuesBasedPredicateDefinitionContext ctx = new NamedValuesBasedPredicateDefinitionContext<>( factory, params, name -> log.paramNotDefined( name, predicateName, field.eventContext() ) ); LuceneSearchPredicate providedPredicate = LuceneSearchPredicate.from( scope, definition.create( ctx ) ); diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryOptionsStep.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryOptionsStep.java index 569971864cc..da43fea6300 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryOptionsStep.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryOptionsStep.java @@ -12,13 +12,14 @@ import org.hibernate.search.backend.lucene.search.sort.dsl.LuceneSearchSortFactory; import org.hibernate.search.engine.search.query.dsl.SearchQueryOptionsStep; -public interface LuceneSearchQueryOptionsStep +public interface LuceneSearchQueryOptionsStep extends SearchQueryOptionsStep< - LuceneSearchQueryOptionsStep, + E, + LuceneSearchQueryOptionsStep, H, LOS, - LuceneSearchSortFactory, - LuceneSearchAggregationFactory>, + LuceneSearchSortFactory, + LuceneSearchAggregationFactory>, LuceneSearchFetchable { @Override diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQuerySelectStep.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQuerySelectStep.java index eabf4521471..3cc7b7f2c6a 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQuerySelectStep.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQuerySelectStep.java @@ -17,31 +17,31 @@ public interface LuceneSearchQuerySelectStep extends SearchQuerySelectStep< - LuceneSearchQueryOptionsStep, + LuceneSearchQueryOptionsStep, R, E, LOS, LuceneSearchProjectionFactory, - LuceneSearchPredicateFactory>, - LuceneSearchQueryWhereStep { + LuceneSearchPredicateFactory>, + LuceneSearchQueryWhereStep { @Override - LuceneSearchQueryWhereStep selectEntity(); + LuceneSearchQueryWhereStep selectEntity(); @Override - LuceneSearchQueryWhereStep selectEntityReference(); + LuceneSearchQueryWhereStep selectEntityReference(); @Override -

LuceneSearchQueryWhereStep select(Class

objectClass); +

LuceneSearchQueryWhereStep select(Class

objectClass); @Override -

LuceneSearchQueryWhereStep select( +

LuceneSearchQueryWhereStep select( Function, ? extends ProjectionFinalStep

> projectionContributor); @Override -

LuceneSearchQueryWhereStep select(SearchProjection

projection); +

LuceneSearchQueryWhereStep select(SearchProjection

projection); @Override - LuceneSearchQueryWhereStep, LOS> select(SearchProjection... projections); + LuceneSearchQueryWhereStep, LOS> select(SearchProjection... projections); } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryWhereStep.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryWhereStep.java index a7d4f27aefc..9e1b6f7e3d7 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryWhereStep.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryWhereStep.java @@ -9,7 +9,7 @@ import org.hibernate.search.backend.lucene.search.predicate.dsl.LuceneSearchPredicateFactory; import org.hibernate.search.engine.search.query.dsl.SearchQueryWhereStep; -public interface LuceneSearchQueryWhereStep - extends SearchQueryWhereStep, H, LOS, LuceneSearchPredicateFactory> { +public interface LuceneSearchQueryWhereStep + extends SearchQueryWhereStep, H, LOS, LuceneSearchPredicateFactory> { } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQueryOptionsStepImpl.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQueryOptionsStepImpl.java index 876d4e1f702..244229e50a3 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQueryOptionsStepImpl.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQueryOptionsStepImpl.java @@ -20,18 +20,19 @@ import org.hibernate.search.engine.search.loading.spi.SearchLoadingContextBuilder; import org.hibernate.search.engine.search.query.dsl.spi.AbstractExtendedSearchQueryOptionsStep; -class LuceneSearchQueryOptionsStepImpl +class LuceneSearchQueryOptionsStepImpl extends AbstractExtendedSearchQueryOptionsStep< - LuceneSearchQueryOptionsStep, + E, + LuceneSearchQueryOptionsStep, H, LuceneSearchResult, LuceneSearchScroll, LOS, - LuceneSearchPredicateFactory, - LuceneSearchSortFactory, - LuceneSearchAggregationFactory, + LuceneSearchPredicateFactory, + LuceneSearchSortFactory, + LuceneSearchAggregationFactory, LuceneSearchQueryIndexScope> - implements LuceneSearchQueryWhereStep, LuceneSearchQueryOptionsStep { + implements LuceneSearchQueryWhereStep, LuceneSearchQueryOptionsStep { private final LuceneSearchQueryBuilder searchQueryBuilder; @@ -48,13 +49,13 @@ public LuceneSearchQuery toQuery() { } @Override - protected LuceneSearchQueryOptionsStepImpl thisAsS() { + protected LuceneSearchQueryOptionsStepImpl thisAsS() { return this; } @Override - protected LuceneSearchPredicateFactory predicateFactory() { - return scope.predicateFactory(); + protected LuceneSearchPredicateFactory predicateFactory() { + return scope.predicateFactory(); } @Override diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQuerySelectStepImpl.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQuerySelectStepImpl.java index 7bd3ee0ca4b..00762afcfcb 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQuerySelectStepImpl.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/impl/LuceneSearchQuerySelectStepImpl.java @@ -30,12 +30,12 @@ public class LuceneSearchQuerySelectStepImpl extends AbstractSearchQuerySelectStep< - LuceneSearchQueryOptionsStep, + LuceneSearchQueryOptionsStep, R, E, LOS, LuceneSearchProjectionFactory, - LuceneSearchPredicateFactory> + LuceneSearchPredicateFactory> implements LuceneSearchQuerySelectStep { private final LuceneSearchQueryIndexScope scope; @@ -51,55 +51,55 @@ public LuceneSearchQuerySelectStepImpl(LuceneSearchQueryIndexScope scope, } @Override - public LuceneSearchQueryWhereStep selectEntity() { + public LuceneSearchQueryWhereStep selectEntity() { return select( scope.projectionFactory().entity().toProjection() ); } @Override - public LuceneSearchQueryWhereStep selectEntityReference() { + public LuceneSearchQueryWhereStep selectEntityReference() { return select( scope.projectionBuilders().entityReference() ); } @Override - public

LuceneSearchQueryWhereStep select(Class

objectClass) { + public

LuceneSearchQueryWhereStep select(Class

objectClass) { return select( scope.projectionFactory().composite().as( objectClass ).toProjection() ); } @Override - public

LuceneSearchQueryWhereStep select( + public

LuceneSearchQueryWhereStep select( Function, ? extends ProjectionFinalStep

> projectionContributor) { SearchProjection

projection = projectionContributor.apply( scope.projectionFactory() ).toProjection(); return select( projection ); } @Override - public

LuceneSearchQueryWhereStep select(SearchProjection

projection) { + public

LuceneSearchQueryWhereStep select(SearchProjection

projection) { LuceneSearchQueryBuilder

builder = scope.select( sessionContext, loadingContextBuilder, projection ); return new LuceneSearchQueryOptionsStepImpl<>( scope, builder, loadingContextBuilder ); } @Override - public LuceneSearchQueryWhereStep, LOS> select(SearchProjection... projections) { + public LuceneSearchQueryWhereStep, LOS> select(SearchProjection... projections) { return select( scope.projectionBuilders().composite() .build( projections, ProjectionCompositor.fromList( projections.length ), ProjectionAccumulator.single() ) ); } @Override - public LuceneSearchQueryOptionsStep where(SearchPredicate predicate) { + public LuceneSearchQueryOptionsStep where(SearchPredicate predicate) { return selectEntity().where( predicate ); } @Override - public LuceneSearchQueryOptionsStep where( - Function predicateContributor) { + public LuceneSearchQueryOptionsStep where( + Function, ? extends PredicateFinalStep> predicateContributor) { return selectEntity().where( predicateContributor ); } @Override - public LuceneSearchQueryOptionsStep where( - BiConsumer where( + BiConsumer, ? super SimpleBooleanPredicateClausesCollector> predicateContributor) { return selectEntity().where( predicateContributor ); } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearchQueryIndexScope.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearchQueryIndexScope.java index b27759146d7..b18932737a1 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearchQueryIndexScope.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearchQueryIndexScope.java @@ -38,16 +38,16 @@

LuceneSearchQueryBuilder

select(BackendSessionContext sessionContext, SearchLoadingContextBuilder loadingContextBuilder, SearchProjection

projection); @Override - LuceneSearchPredicateFactory predicateFactory(); + LuceneSearchPredicateFactory predicateFactory(); @Override - LuceneSearchSortFactory sortFactory(); + LuceneSearchSortFactory sortFactory(); @Override LuceneSearchProjectionFactory projectionFactory(); @Override - LuceneSearchAggregationFactory aggregationFactory(); + LuceneSearchAggregationFactory aggregationFactory(); Query filterOrNull(String tenantId); diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/LuceneSearchSortFactory.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/LuceneSearchSortFactory.java index dc9c458e4a9..c8930a72920 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/LuceneSearchSortFactory.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/LuceneSearchSortFactory.java @@ -16,8 +16,8 @@ /** * A factory for search sorts with some Lucene-specific methods. */ -public interface LuceneSearchSortFactory - extends ExtendedSearchSortFactory { +public interface LuceneSearchSortFactory + extends ExtendedSearchSortFactory, LuceneSearchPredicateFactory> { /** * Order elements by a given Lucene {@link SortField}. @@ -26,7 +26,7 @@ public interface LuceneSearchSortFactory * @return A {@link SortThenStep} allowing the retrieval of the sort * or the chaining of other sorts. */ - SortThenStep fromLuceneSortField(SortField luceneSortField); + SortThenStep fromLuceneSortField(SortField luceneSortField); /** * Order elements by a given Lucene {@link Sort}. @@ -35,6 +35,6 @@ public interface LuceneSearchSortFactory * @return A {@link SortThenStep} allowing the retrieval of the sort * or the chaining of other sorts. */ - SortThenStep fromLuceneSort(Sort luceneSort); + SortThenStep fromLuceneSort(Sort luceneSort); } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/impl/LuceneSearchSortFactoryImpl.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/impl/LuceneSearchSortFactoryImpl.java index 8a62a199601..205649277e8 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/impl/LuceneSearchSortFactoryImpl.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/sort/dsl/impl/LuceneSearchSortFactoryImpl.java @@ -16,32 +16,33 @@ import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField; -public class LuceneSearchSortFactoryImpl +public class LuceneSearchSortFactoryImpl extends AbstractSearchSortFactory< - LuceneSearchSortFactory, + E, + LuceneSearchSortFactory, LuceneSearchSortIndexScope, - LuceneSearchPredicateFactory> - implements LuceneSearchSortFactory { + LuceneSearchPredicateFactory> + implements LuceneSearchSortFactory { public LuceneSearchSortFactoryImpl( - SearchSortDslContext, LuceneSearchPredicateFactory> dslContext) { + SearchSortDslContext, LuceneSearchPredicateFactory> dslContext) { super( dslContext ); } @Override - public LuceneSearchSortFactory withRoot(String objectFieldPath) { - return new LuceneSearchSortFactoryImpl( dslContext.rescope( + public LuceneSearchSortFactory withRoot(String objectFieldPath) { + return new LuceneSearchSortFactoryImpl<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ), dslContext.predicateFactory().withRoot( objectFieldPath ) ) ); } @Override - public SortThenStep fromLuceneSortField(SortField luceneSortField) { + public SortThenStep fromLuceneSortField(SortField luceneSortField) { return staticThenStep( dslContext.scope().sortBuilders().fromLuceneSortField( luceneSortField ) ); } @Override - public SortThenStep fromLuceneSort(Sort luceneSort) { + public SortThenStep fromLuceneSort(Sort luceneSort) { return staticThenStep( dslContext.scope().sortBuilders().fromLuceneSort( luceneSort ) ); } diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/namedpredicate/SkuIdentifierBinder.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/namedpredicate/SkuIdentifierBinder.java index aca12bc494a..1a5c4cce65f 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/namedpredicate/SkuIdentifierBinder.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/namedpredicate/SkuIdentifierBinder.java @@ -88,10 +88,10 @@ public void write(DocumentElement target, String skuId, PropertyBridgeWriteConte //tag::predicate-definition[] // ... class SkuIdentifierBinder (continued) - private static class SkuIdentifierMatchPredicateDefinition implements PredicateDefinition { // <1> + private static class SkuIdentifierMatchPredicateDefinition implements PredicateDefinition { // <1> @Override - public SearchPredicate create(PredicateDefinitionContext context) { - SearchPredicateFactory f = context.predicate(); // <2> + public SearchPredicate create(PredicateDefinitionContext context) { + SearchPredicateFactory f = context.predicate(); // <2> String pattern = context.params().get( "pattern", String.class ); // <3> diff --git a/engine/src/main/java/org/hibernate/search/engine/backend/document/model/dsl/IndexSchemaElement.java b/engine/src/main/java/org/hibernate/search/engine/backend/document/model/dsl/IndexSchemaElement.java index 625cf01a1a5..376ae157ab0 100644 --- a/engine/src/main/java/org/hibernate/search/engine/backend/document/model/dsl/IndexSchemaElement.java +++ b/engine/src/main/java/org/hibernate/search/engine/backend/document/model/dsl/IndexSchemaElement.java @@ -73,8 +73,8 @@ IndexSchemaFieldOptionsStep> field(String relative * @see PredicateDefinition */ @Incubating - IndexSchemaNamedPredicateOptionsStep namedPredicate( - String relativeNamedPredicateName, PredicateDefinition definition); + IndexSchemaNamedPredicateOptionsStep namedPredicate( + String relativeNamedPredicateName, PredicateDefinition definition); /** * Add an object field to this index schema element with the default structure. diff --git a/engine/src/main/java/org/hibernate/search/engine/mapper/scope/impl/MappedIndexScopeImpl.java b/engine/src/main/java/org/hibernate/search/engine/mapper/scope/impl/MappedIndexScopeImpl.java index 06917723dcc..845cfed7fe5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/mapper/scope/impl/MappedIndexScopeImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/mapper/scope/impl/MappedIndexScopeImpl.java @@ -40,7 +40,7 @@ public String toString() { } @Override - public SearchPredicateFactory predicate() { + public SearchPredicateFactory predicate() { return delegate.searchScope().predicateFactory(); } diff --git a/engine/src/main/java/org/hibernate/search/engine/mapper/scope/spi/MappedIndexScope.java b/engine/src/main/java/org/hibernate/search/engine/mapper/scope/spi/MappedIndexScope.java index aa9b374ec62..5eb73c2ed3b 100644 --- a/engine/src/main/java/org/hibernate/search/engine/mapper/scope/spi/MappedIndexScope.java +++ b/engine/src/main/java/org/hibernate/search/engine/mapper/scope/spi/MappedIndexScope.java @@ -36,9 +36,9 @@ public interface MappedIndexScope { BackendSessionContext sessionContext, SearchLoadingContextBuilder loadingContextBuilder); - SearchPredicateFactory predicate(); + SearchPredicateFactory predicate(); - SearchSortFactory sort(); + SearchSortFactory sort(); /* * IMPLEMENTATION NOTE: we *must* return a factory with the same R/E type arguments as this class, diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AggregationFilterStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AggregationFilterStep.java index 1c73d78c04c..8b4ad2be86e 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AggregationFilterStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AggregationFilterStep.java @@ -19,7 +19,7 @@ * @param The "self" type (the actual exposed type of this step) * @param The type of factory used to create predicates in {@link #filter(Function)}. */ -public interface AggregationFilterStep { +public interface AggregationFilterStep> { /** * Filter nested objects from which values will be extracted for this aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/ExtendedSearchAggregationFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/ExtendedSearchAggregationFactory.java index 615d2a64bc8..a48aabf1705 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/ExtendedSearchAggregationFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/ExtendedSearchAggregationFactory.java @@ -21,16 +21,17 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ public interface ExtendedSearchAggregationFactory< - S extends ExtendedSearchAggregationFactory, - PDF extends SearchPredicateFactory> - extends SearchAggregationFactory { + E, + S extends ExtendedSearchAggregationFactory, + PDF extends SearchPredicateFactory> + extends SearchAggregationFactory { @Override S withRoot(String objectFieldPath); @Override - RangeAggregationFieldStep range(); + RangeAggregationFieldStep range(); @Override - TermsAggregationFieldStep terms(); + TermsAggregationFieldStep terms(); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationFieldStep.java index 75b503aa638..8c419d6b5d8 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationFieldStep.java @@ -16,7 +16,7 @@ * * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ -public interface RangeAggregationFieldStep { +public interface RangeAggregationFieldStep> { /** * Target the given field in the range aggregation. @@ -26,7 +26,7 @@ public interface RangeAggregationFieldStep { * @param The type of field values. * @return The next step. */ - default RangeAggregationRangeStep field(String fieldPath, Class type) { + default RangeAggregationRangeStep field(String fieldPath, Class type) { return field( fieldPath, type, ValueConvert.YES ); } @@ -40,6 +40,6 @@ default RangeAggregationRangeStep field(String fieldPath, Class RangeAggregationRangeStep field(String fieldPath, Class type, ValueConvert convert); + RangeAggregationRangeStep field(String fieldPath, Class type, ValueConvert convert); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationOptionsStep.java index fdc2368ad6e..c45f5dde6a4 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationOptionsStep.java @@ -19,10 +19,11 @@ * @param The type of result for this aggregation. */ public interface RangeAggregationOptionsStep< - S extends RangeAggregationOptionsStep, - PDF extends SearchPredicateFactory, + E, + S extends RangeAggregationOptionsStep, + PDF extends SearchPredicateFactory, F, A> - extends AggregationFinalStep, AggregationFilterStep { + extends AggregationFinalStep, AggregationFilterStep { } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeMoreStep.java index 0adfecdf1b3..22410185065 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeMoreStep.java @@ -23,11 +23,12 @@ * @param The type of the targeted field. */ public interface RangeAggregationRangeMoreStep< - S extends RangeAggregationRangeMoreStep, - N extends RangeAggregationOptionsStep, Long>>, - PDF extends SearchPredicateFactory, + E, + S extends RangeAggregationRangeMoreStep, + N extends RangeAggregationOptionsStep, Long>>, + PDF extends SearchPredicateFactory, F> - extends RangeAggregationOptionsStep, Long>>, - RangeAggregationRangeStep { + extends RangeAggregationOptionsStep, Long>>, + RangeAggregationRangeStep { } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeStep.java index 1fedc2159f5..423c3c96413 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/RangeAggregationRangeStep.java @@ -20,8 +20,9 @@ * @param The type of the targeted field. */ public interface RangeAggregationRangeStep< - N extends RangeAggregationRangeMoreStep, - PDF extends SearchPredicateFactory, + E, + N extends RangeAggregationRangeMoreStep, + PDF extends SearchPredicateFactory, F> { /** diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactory.java index 70ec1ce9680..3d3d980e5e6 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactory.java @@ -31,7 +31,7 @@ * * @author Emmanuel Bernard emmanuel@hibernate.org */ -public interface SearchAggregationFactory { +public interface SearchAggregationFactory { /** * Perform aggregation in range buckets. @@ -46,7 +46,7 @@ public interface SearchAggregationFactory { * * @return The next step. */ - RangeAggregationFieldStep range(); + RangeAggregationFieldStep range(); /** * Perform aggregation in term buckets. @@ -61,7 +61,7 @@ public interface SearchAggregationFactory { * * @return The next step. */ - TermsAggregationFieldStep terms(); + TermsAggregationFieldStep terms(); /** @@ -97,7 +97,7 @@ AggregationFinalStep withParameters( * @return A new aggregation factory using the given object field as root. */ @Incubating - SearchAggregationFactory withRoot(String objectFieldPath); + SearchAggregationFactory withRoot(String objectFieldPath); /** * @param relativeFieldPath The path to a field, relative to the {@link #withRoot(String) root} of this factory. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactoryExtension.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactoryExtension.java index 102d0ef9050..4415fa5d50b 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactoryExtension.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SearchAggregationFactoryExtension.java @@ -33,6 +33,6 @@ public interface SearchAggregationFactoryExtension { * @return An optional containing the extended aggregation factory ({@link T}) in case * of success, or an empty optional otherwise. */ - Optional extendOptional(SearchAggregationFactory original); + Optional extendOptional(SearchAggregationFactory original); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationFieldStep.java index 9058464efd9..2e944e9caee 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationFieldStep.java @@ -17,7 +17,7 @@ * * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ -public interface TermsAggregationFieldStep { +public interface TermsAggregationFieldStep> { /** * Target the given field in the terms aggregation. @@ -27,7 +27,7 @@ public interface TermsAggregationFieldStep { * @param The type of field values. * @return The next step. */ - default TermsAggregationOptionsStep> field(String fieldPath, Class type) { + default TermsAggregationOptionsStep> field(String fieldPath, Class type) { return field( fieldPath, type, ValueConvert.YES ); } @@ -41,7 +41,7 @@ default TermsAggregationOptionsStep> field(String fi * See {@link ValueConvert}. * @return The next step. */ - TermsAggregationOptionsStep> field(String fieldPath, Class type, + TermsAggregationOptionsStep> field(String fieldPath, Class type, ValueConvert convert); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationOptionsStep.java index d778304ae00..c221300d1ed 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TermsAggregationOptionsStep.java @@ -19,11 +19,12 @@ * @param The type of result for this aggregation. */ public interface TermsAggregationOptionsStep< - S extends TermsAggregationOptionsStep, - PDF extends SearchPredicateFactory, + E, + S extends TermsAggregationOptionsStep, + PDF extends SearchPredicateFactory, F, A> - extends AggregationFinalStep, AggregationFilterStep { + extends AggregationFinalStep, AggregationFilterStep { /** * Order buckets by descending document count in the aggregation result. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationFieldStepImpl.java index 8007740f397..4ca5aa164ce 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationFieldStepImpl.java @@ -15,15 +15,16 @@ import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class RangeAggregationFieldStepImpl implements RangeAggregationFieldStep { - private final SearchAggregationDslContext dslContext; +public class RangeAggregationFieldStepImpl> + implements RangeAggregationFieldStep { + private final SearchAggregationDslContext dslContext; - public RangeAggregationFieldStepImpl(SearchAggregationDslContext dslContext) { + public RangeAggregationFieldStepImpl(SearchAggregationDslContext dslContext) { this.dslContext = dslContext; } @Override - public RangeAggregationRangeStep field(String fieldPath, Class type, ValueConvert convert) { + public RangeAggregationRangeStep field(String fieldPath, Class type, ValueConvert convert) { Contracts.assertNotNull( fieldPath, "fieldPath" ); Contracts.assertNotNull( type, "type" ); RangeAggregationBuilder builder = dslContext.scope() diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationRangeStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationRangeStepImpl.java index bcf0b8c8ed3..6028a243afb 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationRangeStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/RangeAggregationRangeStepImpl.java @@ -21,27 +21,31 @@ import org.hibernate.search.util.common.data.Range; import org.hibernate.search.util.common.impl.Contracts; -class RangeAggregationRangeStepImpl - implements RangeAggregationRangeStep, PDF, F>, - RangeAggregationRangeMoreStep, RangeAggregationRangeStepImpl, PDF, F> { +class RangeAggregationRangeStepImpl, F> + implements RangeAggregationRangeStep, PDF, F>, + RangeAggregationRangeMoreStep, + RangeAggregationRangeStepImpl, + PDF, + F> { private final RangeAggregationBuilder builder; - private final SearchAggregationDslContext dslContext; + private final SearchAggregationDslContext dslContext; RangeAggregationRangeStepImpl(RangeAggregationBuilder builder, - SearchAggregationDslContext dslContext) { + SearchAggregationDslContext dslContext) { this.builder = builder; this.dslContext = dslContext; } @Override - public RangeAggregationRangeStepImpl range(Range range) { + public RangeAggregationRangeStepImpl range(Range range) { Contracts.assertNotNull( range, "range" ); builder.range( range ); return this; } @Override - public RangeAggregationRangeStepImpl ranges(Collection> ranges) { + public RangeAggregationRangeStepImpl ranges(Collection> ranges) { Contracts.assertNotNull( ranges, "ranges" ); for ( Range range : ranges ) { range( range ); @@ -50,7 +54,7 @@ public RangeAggregationRangeStepImpl ranges(Collection filter( + public RangeAggregationRangeStepImpl filter( Function clauseContributor) { SearchPredicate predicate = clauseContributor.apply( dslContext.predicateFactory() ).toPredicate(); @@ -58,7 +62,7 @@ public RangeAggregationRangeStepImpl filter( } @Override - public RangeAggregationRangeStepImpl filter(SearchPredicate searchPredicate) { + public RangeAggregationRangeStepImpl filter(SearchPredicate searchPredicate) { builder.filter( searchPredicate ); return this; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationFieldStepImpl.java index 2759996fe50..719b3966ec5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationFieldStepImpl.java @@ -17,15 +17,16 @@ import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class TermsAggregationFieldStepImpl implements TermsAggregationFieldStep { - private final SearchAggregationDslContext dslContext; +public class TermsAggregationFieldStepImpl> + implements TermsAggregationFieldStep { + private final SearchAggregationDslContext dslContext; - public TermsAggregationFieldStepImpl(SearchAggregationDslContext dslContext) { + public TermsAggregationFieldStepImpl(SearchAggregationDslContext dslContext) { this.dslContext = dslContext; } @Override - public TermsAggregationOptionsStep> field(String fieldPath, Class type, + public TermsAggregationOptionsStep> field(String fieldPath, Class type, ValueConvert convert) { Contracts.assertNotNull( fieldPath, "fieldPath" ); Contracts.assertNotNull( type, "type" ); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationOptionsStepImpl.java index bb129afef0b..9bb843cd0e9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/TermsAggregationOptionsStepImpl.java @@ -18,57 +18,57 @@ import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -class TermsAggregationOptionsStepImpl - implements TermsAggregationOptionsStep, PDF, F, Map> { +class TermsAggregationOptionsStepImpl, F> + implements TermsAggregationOptionsStep, PDF, F, Map> { private final TermsAggregationBuilder builder; - private final SearchAggregationDslContext dslContext; + private final SearchAggregationDslContext dslContext; TermsAggregationOptionsStepImpl(TermsAggregationBuilder builder, - SearchAggregationDslContext dslContext) { + SearchAggregationDslContext dslContext) { this.builder = builder; this.dslContext = dslContext; } @Override - public TermsAggregationOptionsStepImpl orderByCountDescending() { + public TermsAggregationOptionsStepImpl orderByCountDescending() { builder.orderByCountDescending(); return this; } @Override - public TermsAggregationOptionsStepImpl orderByCountAscending() { + public TermsAggregationOptionsStepImpl orderByCountAscending() { builder.orderByCountAscending(); return this; } @Override - public TermsAggregationOptionsStepImpl orderByTermAscending() { + public TermsAggregationOptionsStepImpl orderByTermAscending() { builder.orderByTermAscending(); return this; } @Override - public TermsAggregationOptionsStepImpl orderByTermDescending() { + public TermsAggregationOptionsStepImpl orderByTermDescending() { builder.orderByTermDescending(); return this; } @Override - public TermsAggregationOptionsStepImpl minDocumentCount(int minDocumentCount) { + public TermsAggregationOptionsStepImpl minDocumentCount(int minDocumentCount) { Contracts.assertPositiveOrZero( minDocumentCount, "minDocumentCount" ); builder.minDocumentCount( minDocumentCount ); return this; } @Override - public TermsAggregationOptionsStepImpl maxTermCount(int maxTermCount) { + public TermsAggregationOptionsStepImpl maxTermCount(int maxTermCount) { Contracts.assertStrictlyPositive( maxTermCount, "maxTermCount" ); builder.maxTermCount( maxTermCount ); return this; } @Override - public TermsAggregationOptionsStepImpl filter( + public TermsAggregationOptionsStepImpl filter( Function clauseContributor) { SearchPredicate predicate = clauseContributor.apply( dslContext.predicateFactory() ).toPredicate(); @@ -76,7 +76,7 @@ public TermsAggregationOptionsStepImpl filter( } @Override - public TermsAggregationOptionsStepImpl filter(SearchPredicate searchPredicate) { + public TermsAggregationOptionsStepImpl filter(SearchPredicate searchPredicate) { builder.filter( searchPredicate ); return this; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/WithParametersAggregationFinalStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/WithParametersAggregationFinalStep.java index 78fea9af6b2..65348b24c8d 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/WithParametersAggregationFinalStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/WithParametersAggregationFinalStep.java @@ -14,12 +14,12 @@ import org.hibernate.search.engine.search.aggregation.spi.WithParametersAggregationBuilder; import org.hibernate.search.engine.search.common.NamedValues; -public class WithParametersAggregationFinalStep implements AggregationFinalStep { +public class WithParametersAggregationFinalStep implements AggregationFinalStep { private final WithParametersAggregationBuilder builder; public WithParametersAggregationFinalStep( - SearchAggregationDslContext dslContext, + SearchAggregationDslContext dslContext, Function> aggregationCreator) { builder = dslContext.scope().aggregationBuilders().withParameters(); builder.creator( aggregationCreator ); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/AbstractSearchAggregationFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/AbstractSearchAggregationFactory.java index e2525951af2..693a01bedea 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/AbstractSearchAggregationFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/AbstractSearchAggregationFactory.java @@ -22,24 +22,25 @@ import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; public abstract class AbstractSearchAggregationFactory< - S extends ExtendedSearchAggregationFactory, + E, + S extends ExtendedSearchAggregationFactory, SC extends SearchAggregationIndexScope, - PDF extends SearchPredicateFactory> - implements ExtendedSearchAggregationFactory { + PDF extends SearchPredicateFactory> + implements ExtendedSearchAggregationFactory { - protected final SearchAggregationDslContext dslContext; + protected final SearchAggregationDslContext dslContext; - public AbstractSearchAggregationFactory(SearchAggregationDslContext dslContext) { + public AbstractSearchAggregationFactory(SearchAggregationDslContext dslContext) { this.dslContext = dslContext; } @Override - public RangeAggregationFieldStep range() { + public RangeAggregationFieldStep range() { return new RangeAggregationFieldStepImpl<>( dslContext ); } @Override - public TermsAggregationFieldStep terms() { + public TermsAggregationFieldStep terms() { return new TermsAggregationFieldStepImpl<>( dslContext ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationDslContext.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationDslContext.java index 9181e0e6199..e252074118f 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationDslContext.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationDslContext.java @@ -19,10 +19,12 @@ * @param The type of the backend-specific search scope. * @param The type of factory used to create predicates in {@link FieldSortOptionsStep#filter(Function)}. */ -public class SearchAggregationDslContext, PDF extends SearchPredicateFactory> { +public class SearchAggregationDslContext, PDF extends SearchPredicateFactory> { public static < + E, SC extends SearchAggregationIndexScope, - PDF extends SearchPredicateFactory> SearchAggregationDslContext root(SC scope, PDF predicateFactory) { + PDF extends SearchPredicateFactory> SearchAggregationDslContext root(SC scope, + PDF predicateFactory) { return new SearchAggregationDslContext<>( scope, predicateFactory ); } @@ -46,7 +48,7 @@ public SC scope() { * @param newPredicateFactory The new predicate factory for the new DSL context. * @return A copy of this DSL context with its scope and predicate factory replaced with the given ones. */ - public SearchAggregationDslContext rescope(SC newScope, PDF newPredicateFactory) { + public SearchAggregationDslContext rescope(SC newScope, PDF newPredicateFactory) { return new SearchAggregationDslContext<>( newScope, newPredicateFactory ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinition.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinition.java index eda2af04976..c0fa5868963 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinition.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinition.java @@ -23,13 +23,13 @@ * */ @Incubating -public interface PredicateDefinition { +public interface PredicateDefinition { /** * Creates a predicate. * @param context The context, exposing in particular a {@link SearchPredicateFactory}. * @return The created {@link SearchPredicate}. */ - SearchPredicate create(PredicateDefinitionContext context); + SearchPredicate create(PredicateDefinitionContext context); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinitionContext.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinitionContext.java index acfacdac702..36127c02b86 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinitionContext.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/definition/PredicateDefinitionContext.java @@ -19,7 +19,7 @@ * @see PredicateDefinition#create(PredicateDefinitionContext) */ @Incubating -public interface PredicateDefinitionContext { +public interface PredicateDefinitionContext { /** * @return A predicate factory. @@ -29,7 +29,7 @@ public interface PredicateDefinitionContext { * {@link PredicateDefinition#create(PredicateDefinitionContext)} returns. * @see SearchPredicateFactory */ - SearchPredicateFactory predicate(); + SearchPredicateFactory predicate(); /** * @param name The name of the parameter. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExtendedSearchPredicateFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExtendedSearchPredicateFactory.java index 02e54071648..e0bd895289e 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExtendedSearchPredicateFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/ExtendedSearchPredicateFactory.java @@ -15,8 +15,8 @@ * * @param The self type, i.e. the exposed type of this factory. */ -public interface ExtendedSearchPredicateFactory> - extends SearchPredicateFactory { +public interface ExtendedSearchPredicateFactory> + extends SearchPredicateFactory { @Override S withRoot(String objectFieldPath); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java index ceef6db2214..1dfaa18771a 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateFieldStep.java @@ -6,12 +6,12 @@ */ package org.hibernate.search.engine.search.predicate.dsl; -import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.engine.search.reference.traits.predicate.KnnPredicateFieldReference; /** * The initial step in a "knn" predicate definition, where the target field can be set. */ -public interface KnnPredicateFieldStep { +public interface KnnPredicateFieldStep { /** * Target the given field in the match predicate. @@ -19,7 +19,7 @@ public interface KnnPredicateFieldStep { * @param fieldPath The path to the index field to apply the predicate on. * @return The next step in the knn predicate DSL. */ - KnnPredicateVectorStep field(String fieldPath); + KnnPredicateVectorStep field(String fieldPath); - KnnPredicateVectorGenericStep field(TypedFieldReference field); + KnnPredicateVectorGenericStep field(KnnPredicateFieldReference field); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateOptionsStep.java index d2efc77bb8a..9aeb8714e62 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateOptionsStep.java @@ -13,22 +13,23 @@ /** * The final step in a "knn" predicate definition, where optional parameters can be set. */ -public interface KnnPredicateOptionsStep - extends PredicateScoreStep, PredicateFinalStep { +public interface KnnPredicateOptionsStep + extends PredicateScoreStep>, PredicateFinalStep { - KnnPredicateOptionsStep filter(SearchPredicate searchPredicate); + KnnPredicateOptionsStep filter(SearchPredicate searchPredicate); - default KnnPredicateOptionsStep filter(PredicateFinalStep searchPredicate) { + default KnnPredicateOptionsStep filter(PredicateFinalStep searchPredicate) { return filter( searchPredicate.toPredicate() ); } - KnnPredicateOptionsStep filter(Function clauseContributor); + KnnPredicateOptionsStep filter( + Function, ? extends PredicateFinalStep> clauseContributor); /** * @param similarity A similarity limit: documents with vectors distance to which, according to the configured similarity function, * is further than this limit will be filtered out from the results. * @return {@code this}, for method chaining. */ - KnnPredicateOptionsStep requiredMinimumSimilarity(float similarity); + KnnPredicateOptionsStep requiredMinimumSimilarity(float similarity); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorStep.java index 2f630f72bc3..c89b8de73b4 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/KnnPredicateVectorStep.java @@ -9,17 +9,17 @@ /** * The step in a "knn" predicate definition where the vector to match is defined. */ -public interface KnnPredicateVectorStep { +public interface KnnPredicateVectorStep { /** * @param vector The vector from which to compute the distance to vectors in the indexed field. * @return The next step in the knn predicate DSL. */ - KnnPredicateOptionsStep matching(byte... vector); + KnnPredicateOptionsStep matching(byte... vector); /** * @param vector The vector from which to compute the distance to vectors in the indexed field. * @return The next step in the knn predicate DSL. */ - KnnPredicateOptionsStep matching(float... vector); + KnnPredicateOptionsStep matching(float... vector); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java index 4faf8ec9de3..0f13dde08f9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreGenericStep.java @@ -18,7 +18,8 @@ * @param The type representing the fields. */ public interface MatchPredicateFieldMoreGenericStep< - S extends MatchPredicateFieldMoreGenericStep, + E, + S extends MatchPredicateFieldMoreGenericStep, N extends MatchPredicateOptionsStep, T, V> diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java index f958b4db8b5..8c2319bbc70 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldMoreStep.java @@ -16,8 +16,9 @@ * @param The type of the next step. */ public interface MatchPredicateFieldMoreStep< - S extends MatchPredicateFieldMoreStep, + E, + S extends MatchPredicateFieldMoreStep, N extends MatchPredicateOptionsStep> - extends MatchPredicateMatchingStep, MatchPredicateFieldMoreGenericStep { + extends MatchPredicateMatchingStep, MatchPredicateFieldMoreGenericStep { } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java index 401f71ce3d9..4811a646e91 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchPredicateFieldStep.java @@ -6,12 +6,12 @@ */ package org.hibernate.search.engine.search.predicate.dsl; -import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.engine.search.reference.traits.predicate.MatchPredicateFieldReference; /** * The initial step in a "match" predicate definition, where the target field can be set. */ -public interface MatchPredicateFieldStep> { +public interface MatchPredicateFieldStep> { /** * Target the given field in the match predicate. @@ -51,7 +51,8 @@ default N field(String fieldPath) { * TODO */ @SuppressWarnings("unchecked") - default MatchPredicateFieldMoreGenericStep> field(TypedFieldReference field) { + default MatchPredicateFieldMoreGenericStep> field( + MatchPredicateFieldReference field) { return fields( field ); } @@ -59,5 +60,6 @@ default N field(String fieldPath) { * TODO */ @SuppressWarnings("unchecked") - MatchPredicateFieldMoreGenericStep> fields(TypedFieldReference... fields); + MatchPredicateFieldMoreGenericStep> fields( + MatchPredicateFieldReference... fields); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java index ddd66eeaf60..85ce92ecb13 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactory.java @@ -36,7 +36,7 @@ * Such a factory can also transform relative paths into absolute paths using {@link #toAbsolutePath(String)}; * this can be useful for native predicates in particular. */ -public interface SearchPredicateFactory { +public interface SearchPredicateFactory { /** * Match all documents. @@ -164,7 +164,7 @@ SimpleBooleanPredicateOptionsStep or(PredicateFinalStep firstSearchPredicate, * @return The initial step of a DSL where the "match" predicate can be defined. * @see MatchPredicateFieldStep */ - MatchPredicateFieldStep match(); + MatchPredicateFieldStep match(); /** * Match documents where targeted fields have a value within lower and upper bounds. @@ -318,7 +318,7 @@ default NestedPredicateClausesStep nested(NestedObjectFieldReference field) { * @see KnnPredicateVectorStep * @see KnnPredicateOptionsStep */ - KnnPredicateFieldStep knn(int k); + KnnPredicateFieldStep knn(int k); /** * Delegating predicate that creates the actual predicate at query create time and provides access to query parameters. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtension.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtension.java index addab61bfed..8aacfce2e9f 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtension.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtension.java @@ -33,6 +33,6 @@ public interface SearchPredicateFactoryExtension { * @return An optional containing the extended search predicate factory ({@link T}) in case * of success, or an empty optional otherwise. */ - Optional extendOptional(SearchPredicateFactory original); + Optional extendOptional(SearchPredicateFactory original); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java index bede5ab86dd..6d577a122ad 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/AbstractMatchPredicateFieldMoreStep.java @@ -26,13 +26,14 @@ import org.hibernate.search.engine.search.predicate.spi.MatchPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.MinimumShouldMatchBuilder; import org.hibernate.search.engine.search.predicate.spi.PredicateTypeKeys; -import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.engine.search.reference.traits.predicate.MatchPredicateFieldReference; import org.hibernate.search.util.common.impl.Contracts; import org.hibernate.search.util.common.logging.impl.LoggerFactory; abstract class AbstractMatchPredicateFieldMoreStep< - CS extends AbstractMatchPredicateFieldMoreStep.GenericCommonState, - S extends AbstractMatchPredicateFieldMoreStep, + E, + CS extends AbstractMatchPredicateFieldMoreStep.GenericCommonState, + S extends AbstractMatchPredicateFieldMoreStep, T, V> implements AbstractBooleanMultiFieldPredicateCommonState.FieldSetState { @@ -45,16 +46,16 @@ abstract class AbstractMatchPredicateFieldMoreStep< private Float fieldSetBoost; - public static MatchPredicateFieldMoreStep create( + public static MatchPredicateFieldMoreStep create( SearchPredicateDslContext dslContext, String[] fields) { - return new MatchPredicateFieldMoreStepString( + return new MatchPredicateFieldMoreStepString<>( dslContext, Arrays.asList( fields ) ); } - public static MatchPredicateFieldMoreGenericStep> create( - SearchPredicateDslContext dslContext, TypedFieldReference[] fields) { + public static MatchPredicateFieldMoreGenericStep> create( + SearchPredicateDslContext dslContext, MatchPredicateFieldReference[] fields) { return new MatchPredicateFieldMoreStepFieldReference<>( dslContext, Arrays.asList( fields ) @@ -89,25 +90,29 @@ public void contributePredicates(Consumer collector) { } } - private static class MatchPredicateFieldMoreStepString + private static class MatchPredicateFieldMoreStepString extends - AbstractMatchPredicateFieldMoreStep, + MatchPredicateFieldMoreStepString, Object, String> implements - MatchPredicateFieldMoreStep { + MatchPredicateFieldMoreStep, + MatchPredicateFieldMoreStepString.CommonState> { MatchPredicateFieldMoreStepString(SearchPredicateDslContext dslContext, List fieldPaths) { - super( new CommonState( dslContext ), fieldPaths ); + super( new CommonState<>( dslContext ), fieldPaths ); } - private MatchPredicateFieldMoreStepString(CommonState commonState, List fieldPaths) { + private MatchPredicateFieldMoreStepString(CommonState commonState, List fieldPaths) { super( commonState, fieldPaths ); } @Override - protected MatchPredicateFieldMoreStepString thisAsS() { + protected MatchPredicateFieldMoreStepString thisAsS() { return this; } @@ -117,32 +122,33 @@ protected String fieldPath(String field) { } @Override - public MatchPredicateFieldMoreStepString field(String field) { - return new MatchPredicateFieldMoreStepString( commonState, Arrays.asList( field ) ); + public MatchPredicateFieldMoreStepString field(String field) { + return new MatchPredicateFieldMoreStepString<>( commonState, Arrays.asList( field ) ); } @Override - public MatchPredicateFieldMoreStepString fields(String... fieldPaths) { - return new MatchPredicateFieldMoreStepString( commonState, Arrays.asList( fieldPaths ) ); + public MatchPredicateFieldMoreStepString fields(String... fieldPaths) { + return new MatchPredicateFieldMoreStepString<>( commonState, Arrays.asList( fieldPaths ) ); } @Override - public CommonState matching(Object value, ValueConvert convert) { + public CommonState matching(Object value, ValueConvert convert) { return commonState.matching( value, convert ); } - private static class CommonState extends GenericCommonState { + private static class CommonState + extends GenericCommonState> { CommonState(SearchPredicateDslContext dslContext) { super( dslContext ); } - CommonState matching(Object value, ValueConvert convert) { + CommonState matching(Object value, ValueConvert convert) { Contracts.assertNotNull( value, "value" ); Contracts.assertNotNull( convert, "convert" ); - for ( MatchPredicateFieldMoreStepString fieldSetState : getFieldSetStates() ) { + for ( MatchPredicateFieldMoreStepString fieldSetState : getFieldSetStates() ) { for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { predicateBuilder.value( value, convert ); } @@ -153,65 +159,75 @@ CommonState matching(Object value, ValueConvert convert) { } } - private static class MatchPredicateFieldMoreStepFieldReference + private static class MatchPredicateFieldMoreStepFieldReference extends - AbstractMatchPredicateFieldMoreStep, - MatchPredicateFieldMoreStepFieldReference, + AbstractMatchPredicateFieldMoreStep< + E, + MatchPredicateFieldMoreStepFieldReference.CommonState, + MatchPredicateFieldMoreStepFieldReference, T, - TypedFieldReference> + MatchPredicateFieldReference> implements - MatchPredicateFieldMoreGenericStep, - MatchPredicateFieldMoreStepFieldReference.CommonState, + MatchPredicateFieldMoreGenericStep, + MatchPredicateFieldMoreStepFieldReference.CommonState, T, - TypedFieldReference> { + MatchPredicateFieldReference> { MatchPredicateFieldMoreStepFieldReference(SearchPredicateDslContext dslContext, - List> fieldPaths) { + List> fieldPaths) { super( new CommonState<>( dslContext ), fieldPaths ); } - private MatchPredicateFieldMoreStepFieldReference(CommonState commonState, List> fieldPaths) { + private MatchPredicateFieldMoreStepFieldReference(CommonState commonState, + List> fieldPaths) { super( commonState, fieldPaths ); } @Override - public MatchPredicateFieldMoreStepFieldReference field(TypedFieldReference field) { + public MatchPredicateFieldMoreStepFieldReference field(MatchPredicateFieldReference field) { return new MatchPredicateFieldMoreStepFieldReference<>( commonState, Collections.singletonList( field ) ); } @Override @SuppressWarnings("unchecked") - public MatchPredicateFieldMoreStepFieldReference fields(TypedFieldReference... fieldPaths) { + public MatchPredicateFieldMoreStepFieldReference fields( + MatchPredicateFieldReference... fieldPaths) { return new MatchPredicateFieldMoreStepFieldReference<>( commonState, Arrays.asList( fieldPaths ) ); } @Override - public CommonState matching(T value) { + public CommonState matching(T value) { return commonState.matching( value ); } @Override - protected MatchPredicateFieldMoreStepFieldReference thisAsS() { + protected MatchPredicateFieldMoreStepFieldReference thisAsS() { return this; } @Override - protected String fieldPath(TypedFieldReference field) { + protected String fieldPath(MatchPredicateFieldReference field) { return field.absolutePath(); } - private static class CommonState - extends GenericCommonState, MatchPredicateFieldMoreStepFieldReference> { + private static class CommonState + extends + GenericCommonState, + MatchPredicateFieldMoreStepFieldReference> { CommonState(SearchPredicateDslContext dslContext) { super( dslContext ); } - CommonState matching(T value) { + CommonState matching(T value) { Contracts.assertNotNull( value, "value" ); - for ( MatchPredicateFieldMoreStepFieldReference fieldSetState : getFieldSetStates() ) { - for ( Map.Entry, MatchPredicateBuilder> entry : fieldSetState.predicateBuilders - .entrySet() ) { + for ( MatchPredicateFieldMoreStepFieldReference fieldSetState : getFieldSetStates() ) { + for ( Map.Entry, + MatchPredicateBuilder> entry : fieldSetState.predicateBuilders + .entrySet() ) { entry.getValue().value( value, entry.getKey().valueConvert() ); } } @@ -220,11 +236,11 @@ CommonState matching(T value) { } } - static class GenericCommonState> - extends AbstractBooleanMultiFieldPredicateCommonState, S> - implements MatchPredicateOptionsStep> { + static class GenericCommonState> + extends AbstractBooleanMultiFieldPredicateCommonState, S> + implements MatchPredicateOptionsStep> { - private final MinimumShouldMatchConditionStepImpl> minimumShouldMatchStep; + private final MinimumShouldMatchConditionStepImpl> minimumShouldMatchStep; GenericCommonState(SearchPredicateDslContext dslContext) { super( dslContext ); @@ -232,7 +248,7 @@ static class GenericCommonState fuzzy(int maxEditDistance, int exactPrefixLength) { + public GenericCommonState fuzzy(int maxEditDistance, int exactPrefixLength) { if ( maxEditDistance < 0 || 2 < maxEditDistance ) { throw log.invalidFuzzyMaximumEditDistance( maxEditDistance ); } @@ -240,7 +256,7 @@ public GenericCommonState fuzzy(int maxEditDistance, int exactPrefixLen throw log.invalidExactPrefixLength( exactPrefixLength ); } - for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { predicateBuilder.fuzzy( maxEditDistance, exactPrefixLength ); } @@ -249,8 +265,8 @@ public GenericCommonState fuzzy(int maxEditDistance, int exactPrefixLen } @Override - public GenericCommonState analyzer(String analyzerName) { - for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + public GenericCommonState analyzer(String analyzerName) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { predicateBuilder.analyzer( analyzerName ); } @@ -259,8 +275,8 @@ public GenericCommonState analyzer(String analyzerName) { } @Override - public GenericCommonState skipAnalysis() { - for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + public GenericCommonState skipAnalysis() { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { predicateBuilder.skipAnalysis(); } @@ -269,17 +285,17 @@ public GenericCommonState skipAnalysis() { } @Override - protected GenericCommonState thisAsS() { + protected GenericCommonState thisAsS() { return this; } @Override - public MinimumShouldMatchConditionStep> minimumShouldMatch() { + public MinimumShouldMatchConditionStep> minimumShouldMatch() { return minimumShouldMatchStep; } @Override - public GenericCommonState minimumShouldMatch( + public GenericCommonState minimumShouldMatch( Consumer> constraintContributor) { constraintContributor.accept( minimumShouldMatchStep ); return this; @@ -288,7 +304,7 @@ public GenericCommonState minimumShouldMatch( private class MatchMinimumShouldMatchBuilder implements MinimumShouldMatchBuilder { @Override public void minimumShouldMatchNumber(int ignoreConstraintCeiling, int matchingClausesNumber) { - for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { predicateBuilder.minimumShouldMatchNumber( ignoreConstraintCeiling, matchingClausesNumber ); } @@ -297,7 +313,7 @@ public void minimumShouldMatchNumber(int ignoreConstraintCeiling, int matchingCl @Override public void minimumShouldMatchPercent(int ignoreConstraintCeiling, int matchingClausesPercent) { - for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { + for ( AbstractMatchPredicateFieldMoreStep fieldSetState : getFieldSetStates() ) { for ( MatchPredicateBuilder predicateBuilder : fieldSetState.predicateBuilders.values() ) { predicateBuilder.minimumShouldMatchPercent( ignoreConstraintCeiling, matchingClausesPercent ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java index 74dd1c62b71..d94e303ade1 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/KnnPredicateFieldStepImpl.java @@ -20,18 +20,18 @@ import org.hibernate.search.engine.search.predicate.spi.BooleanPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.KnnPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.PredicateTypeKeys; -import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.engine.search.reference.traits.predicate.KnnPredicateFieldReference; -public class KnnPredicateFieldStepImpl +public class KnnPredicateFieldStepImpl extends AbstractPredicateFinalStep - implements KnnPredicateFieldStep, KnnPredicateVectorStep, KnnPredicateOptionsStep { + implements KnnPredicateFieldStep, KnnPredicateVectorStep, KnnPredicateOptionsStep { - private final SearchPredicateFactory factory; + private final SearchPredicateFactory factory; private final int k; private BooleanPredicateBuilder booleanBuilder; protected KnnPredicateBuilder builder; - public KnnPredicateFieldStepImpl(SearchPredicateFactory factory, SearchPredicateDslContext dslContext, int k) { + public KnnPredicateFieldStepImpl(SearchPredicateFactory factory, SearchPredicateDslContext dslContext, int k) { super( dslContext ); this.factory = factory; this.k = k; @@ -45,50 +45,50 @@ public KnnPredicateVectorStep field(String fieldPath) { } @Override - public KnnPredicateVectorGenericStep field(TypedFieldReference field) { + public KnnPredicateVectorGenericStep field(KnnPredicateFieldReference field) { this.field( field.absolutePath() ); return new KnnPredicateVectorGenericStepImpl<>(); } @Override - public KnnPredicateOptionsStep filter(SearchPredicate searchPredicate) { + public KnnPredicateOptionsStep filter(SearchPredicate searchPredicate) { this.booleanPredicateBuilder().must( searchPredicate ); return this; } @Override - public KnnPredicateOptionsStep filter( - Function clauseContributor) { + public KnnPredicateOptionsStep filter( + Function, ? extends PredicateFinalStep> clauseContributor) { this.booleanPredicateBuilder().must( clauseContributor.apply( factory ).toPredicate() ); return this; } @Override - public KnnPredicateOptionsStep matching(byte... vector) { + public KnnPredicateOptionsStep matching(byte... vector) { this.builder.vector( vector ); return this; } @Override - public KnnPredicateOptionsStep matching(float... vector) { + public KnnPredicateOptionsStep matching(float... vector) { this.builder.vector( vector ); return this; } @Override - public KnnPredicateOptionsStep requiredMinimumSimilarity(float similarity) { + public KnnPredicateOptionsStep requiredMinimumSimilarity(float similarity) { this.builder.requiredMinimumSimilarity( similarity ); return this; } @Override - public KnnPredicateOptionsStep boost(float boost) { + public KnnPredicateOptionsStep boost(float boost) { this.builder.boost( boost ); return this; } @Override - public KnnPredicateOptionsStep constantScore() { + public KnnPredicateOptionsStep constantScore() { this.builder.constantScore(); return this; } @@ -111,7 +111,7 @@ private BooleanPredicateBuilder booleanPredicateBuilder() { private class KnnPredicateVectorGenericStepImpl implements KnnPredicateVectorGenericStep { @Override - public KnnPredicateOptionsStep matching(T vector) { + public KnnPredicateOptionsStep matching(T vector) { KnnPredicateFieldStepImpl.this.builder.vector( vector ); return KnnPredicateFieldStepImpl.this; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java index 38ecf5a9d9a..4b435b991fa 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/impl/MatchPredicateFieldStepImpl.java @@ -10,9 +10,9 @@ import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldMoreStep; import org.hibernate.search.engine.search.predicate.dsl.MatchPredicateFieldStep; import org.hibernate.search.engine.search.predicate.dsl.spi.SearchPredicateDslContext; -import org.hibernate.search.engine.search.reference.TypedFieldReference; +import org.hibernate.search.engine.search.reference.traits.predicate.MatchPredicateFieldReference; -public final class MatchPredicateFieldStepImpl implements MatchPredicateFieldStep> { +public final class MatchPredicateFieldStepImpl implements MatchPredicateFieldStep> { private final SearchPredicateDslContext dslContext; @@ -21,13 +21,13 @@ public MatchPredicateFieldStepImpl(SearchPredicateDslContext dslContext) { } @Override - public MatchPredicateFieldMoreStep fields(String... fieldPaths) { + public MatchPredicateFieldMoreStep fields(String... fieldPaths) { return AbstractMatchPredicateFieldMoreStep.create( dslContext, fieldPaths ); } @Override - @SuppressWarnings("unchecked") - public MatchPredicateFieldMoreGenericStep> fields(TypedFieldReference... fields) { + public MatchPredicateFieldMoreGenericStep> fields( + MatchPredicateFieldReference... fields) { return AbstractMatchPredicateFieldMoreStep.create( dslContext, fields ); } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/spi/AbstractSearchPredicateFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/spi/AbstractSearchPredicateFactory.java index dea123538b2..e10b2985f97 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/spi/AbstractSearchPredicateFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/spi/AbstractSearchPredicateFactory.java @@ -65,9 +65,10 @@ import org.hibernate.search.util.common.impl.Contracts; public abstract class AbstractSearchPredicateFactory< - S extends ExtendedSearchPredicateFactory, + E, + S extends ExtendedSearchPredicateFactory, SC extends SearchPredicateIndexScope> - implements ExtendedSearchPredicateFactory { + implements ExtendedSearchPredicateFactory { protected final SearchPredicateDslContext dslContext; @@ -149,8 +150,8 @@ public PredicateFinalStep bool(Consumer> } @Override - public MatchPredicateFieldStep match() { - return new MatchPredicateFieldStepImpl( dslContext ); + public MatchPredicateFieldStep match() { + return new MatchPredicateFieldStepImpl<>( dslContext ); } @Override @@ -227,9 +228,9 @@ public NamedPredicateOptionsStep named(String path) { } @Override - public KnnPredicateFieldStep knn(int k) { + public KnnPredicateFieldStep knn(int k) { Contracts.assertStrictlyPositive( k, "k" ); - return new KnnPredicateFieldStepImpl( this, dslContext, k ); + return new KnnPredicateFieldStepImpl<>( this, dslContext, k ); } @Override diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedPredicateBuilder.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedPredicateBuilder.java index b4f31608d3d..a18eec119c6 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedPredicateBuilder.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedPredicateBuilder.java @@ -8,9 +8,9 @@ import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; -public interface NamedPredicateBuilder extends SearchPredicateBuilder { +public interface NamedPredicateBuilder extends SearchPredicateBuilder { - void factory(SearchPredicateFactory factory); + void factory(SearchPredicateFactory factory); void param(String name, Object value); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedValuesBasedPredicateDefinitionContext.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedValuesBasedPredicateDefinitionContext.java index bb009b2e060..e9ecb0d2ff6 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedValuesBasedPredicateDefinitionContext.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/spi/NamedValuesBasedPredicateDefinitionContext.java @@ -17,19 +17,19 @@ import org.hibernate.search.util.common.annotation.Incubating; @Incubating -public final class NamedValuesBasedPredicateDefinitionContext implements PredicateDefinitionContext { +public final class NamedValuesBasedPredicateDefinitionContext implements PredicateDefinitionContext { - private final SearchPredicateFactory factory; + private final SearchPredicateFactory factory; private final NamedValues parameters; - public NamedValuesBasedPredicateDefinitionContext(SearchPredicateFactory factory, Map params, + public NamedValuesBasedPredicateDefinitionContext(SearchPredicateFactory factory, Map params, Function namedValueMissing) { this.factory = factory; this.parameters = MapNamedValues.fromMap( params, namedValueMissing ); } @Override - public SearchPredicateFactory predicate() { + public SearchPredicateFactory predicate() { return factory; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java index effa365c0b9..97ccdb99900 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/SearchProjectionFactory.java @@ -17,6 +17,7 @@ import org.hibernate.search.engine.search.projection.SearchProjection; import org.hibernate.search.engine.search.reference.ObjectFieldReference; import org.hibernate.search.engine.search.reference.ProjectionTypedFieldReference; +import org.hibernate.search.engine.search.reference.traits.projection.FieldProjectionFieldReference; import org.hibernate.search.engine.spatial.GeoPoint; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.annotation.Incubating; @@ -162,8 +163,9 @@ default FieldProjectionValueStep field(String fieldPath) { */ FieldProjectionValueStep field(String fieldPath, ValueConvert convert); + @Incubating - default FieldProjectionValueStep field(ProjectionTypedFieldReference fieldReference) { + default FieldProjectionValueStep field(FieldProjectionFieldReference fieldReference) { return field( fieldReference.absolutePath(), fieldReference.projectionType(), fieldReference.valueConvert() ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryOptionsStep.java index 9410cc49b5a..b215c07ffbc 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryOptionsStep.java @@ -40,11 +40,12 @@ * @param The type of factory used to create aggregations in {@link #aggregation(AggregationKey, Function)}. */ public interface SearchQueryOptionsStep< - S extends SearchQueryOptionsStep, + E, + S extends SearchQueryOptionsStep, H, LOS, - SF extends SearchSortFactory, - AF extends SearchAggregationFactory> + SF extends SearchSortFactory, + AF extends SearchAggregationFactory> extends SearchQueryFinalStep, SearchFetchable { /** diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQuerySelectStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQuerySelectStep.java index 2678c42546b..cd34aaa61d9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQuerySelectStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQuerySelectStep.java @@ -40,13 +40,13 @@ * @param The type of factory used to create predicates in {@link #where(Function)}. */ public interface SearchQuerySelectStep< - N extends SearchQueryOptionsStep, + N extends SearchQueryOptionsStep, R, E, LOS, PJF extends SearchProjectionFactory, - PDF extends SearchPredicateFactory> - extends SearchQueryWhereStep { + PDF extends SearchPredicateFactory> + extends SearchQueryWhereStep { /** * Select the entity was originally indexed @@ -57,7 +57,7 @@ public interface SearchQuerySelectStep< * @return The next step. * @see SearchQueryWhereStep */ - SearchQueryWhereStep selectEntity(); + SearchQueryWhereStep selectEntity(); /** * Select a reference to the entity that was originally indexed @@ -71,7 +71,7 @@ public interface SearchQuerySelectStep< * @return The next step. * @see SearchQueryWhereStep */ - SearchQueryWhereStep selectEntityReference(); + SearchQueryWhereStep selectEntityReference(); /** * Select an object projection @@ -84,7 +84,7 @@ public interface SearchQuerySelectStep< * @return The next step. * @see SearchQueryWhereStep */ -

SearchQueryWhereStep select(Class

objectClass); +

SearchQueryWhereStep select(Class

objectClass); /** * Select a given projection as a representation of the search hit for each matching document. @@ -96,7 +96,7 @@ public interface SearchQuerySelectStep< * @return The next step. * @see SearchQueryWhereStep */ -

SearchQueryWhereStep select( +

SearchQueryWhereStep select( Function> projectionContributor); /** @@ -107,7 +107,7 @@ public interface SearchQuerySelectStep< * @return The next step. * @see SearchQueryWhereStep */ -

SearchQueryWhereStep select(SearchProjection

projection); +

SearchQueryWhereStep select(SearchProjection

projection); /** * Select a list of projections as a representation of the search hit for each matching document. @@ -122,7 +122,7 @@ public interface SearchQuerySelectStep< * @see SearchProjectionFactory#composite(SearchProjection[]) * @see SearchQueryWhereStep */ - SearchQueryWhereStep, LOS, ?> select(SearchProjection... projections); + SearchQueryWhereStep, LOS, ?> select(SearchProjection... projections); /** * Extend the current DSL step with the given extension, diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryWhereStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryWhereStep.java index d4774da87b3..041acf98170 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryWhereStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/SearchQueryWhereStep.java @@ -24,10 +24,11 @@ * @param The type of the initial step of the loading options definition DSL accessible through {@link SearchQueryOptionsStep#loading(Consumer)}. */ public interface SearchQueryWhereStep< - N extends SearchQueryOptionsStep, + E, + N extends SearchQueryOptionsStep, H, LOS, - PDF extends SearchPredicateFactory> { + PDF extends SearchPredicateFactory> { /** * Set the predicate for this query. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQueryOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQueryOptionsStep.java index 202be08754d..8f0c302b2b8 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQueryOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQueryOptionsStep.java @@ -17,17 +17,23 @@ import org.hibernate.search.engine.search.query.spi.SearchQueryIndexScope; import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; -final class DefaultSearchQueryOptionsStep +final class DefaultSearchQueryOptionsStep extends AbstractSearchQueryOptionsStep< - DefaultSearchQueryOptionsStep, + E, + DefaultSearchQueryOptionsStep, H, LOS, - SearchPredicateFactory, - SearchSortFactory, - SearchAggregationFactory, + SearchPredicateFactory, + SearchSortFactory, + SearchAggregationFactory, SearchQueryIndexScope> - implements SearchQueryWhereStep, H, LOS, SearchPredicateFactory>, - SearchQueryOptionsStep, H, LOS, SearchSortFactory, SearchAggregationFactory> { + implements SearchQueryWhereStep, H, LOS, SearchPredicateFactory>, + SearchQueryOptionsStep, + H, + LOS, + SearchSortFactory, + SearchAggregationFactory> { DefaultSearchQueryOptionsStep(SearchQueryIndexScope scope, SearchQueryBuilder searchQueryBuilder, SearchLoadingContextBuilder loadingContextBuilder) { @@ -35,7 +41,7 @@ final class DefaultSearchQueryOptionsStep } @Override - protected SearchPredicateFactory predicateFactory() { + protected SearchPredicateFactory predicateFactory() { return scope.predicateFactory(); } @@ -55,7 +61,7 @@ protected SearchHighlighterFactory highlighterFactory() { } @Override - protected DefaultSearchQueryOptionsStep thisAsS() { + protected DefaultSearchQueryOptionsStep thisAsS() { return this; } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQuerySelectStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQuerySelectStep.java index 879bae0cbd8..13d8197400c 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQuerySelectStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/impl/DefaultSearchQuerySelectStep.java @@ -29,12 +29,12 @@ public final class DefaultSearchQuerySelectStep extends AbstractSearchQuerySelectStep< - SearchQueryOptionsStep, + SearchQueryOptionsStep, R, E, LOS, SearchProjectionFactory, - SearchPredicateFactory> { + SearchPredicateFactory> { private final SearchQueryIndexScope scope; private final BackendSessionContext sessionContext; @@ -48,54 +48,54 @@ public DefaultSearchQuerySelectStep(SearchQueryIndexScope scope, BackendSessi } @Override - public DefaultSearchQueryOptionsStep selectEntity() { + public DefaultSearchQueryOptionsStep selectEntity() { return select( scope.projectionFactory().entity().toProjection() ); } @Override - public DefaultSearchQueryOptionsStep selectEntityReference() { + public DefaultSearchQueryOptionsStep selectEntityReference() { return select( scope.projectionBuilders().entityReference() ); } @Override - public

SearchQueryWhereStep select(Class

objectClass) { + public

SearchQueryWhereStep select(Class

objectClass) { return select( scope.projectionFactory().composite().as( objectClass ).toProjection() ); } @Override - public

DefaultSearchQueryOptionsStep select( + public

DefaultSearchQueryOptionsStep select( Function, ? extends ProjectionFinalStep

> projectionContributor) { SearchProjection

projection = projectionContributor.apply( scope.projectionFactory() ).toProjection(); return select( projection ); } @Override - public

DefaultSearchQueryOptionsStep select(SearchProjection

projection) { + public

DefaultSearchQueryOptionsStep select(SearchProjection

projection) { SearchQueryBuilder

builder = scope.select( sessionContext, loadingContextBuilder, projection ); return new DefaultSearchQueryOptionsStep<>( scope, builder, loadingContextBuilder ); } @Override - public DefaultSearchQueryOptionsStep, LOS> select(SearchProjection... projections) { + public DefaultSearchQueryOptionsStep, LOS> select(SearchProjection... projections) { return select( scope.projectionBuilders().composite() .build( projections, ProjectionCompositor.fromList( projections.length ), ProjectionAccumulator.single() ) ); } @Override - public SearchQueryOptionsStep where( - Function predicateContributor) { + public SearchQueryOptionsStep where( + Function, ? extends PredicateFinalStep> predicateContributor) { return selectEntity().where( predicateContributor ); } @Override - public SearchQueryOptionsStep where(SearchPredicate predicate) { + public SearchQueryOptionsStep where(SearchPredicate predicate) { return selectEntity().where( predicate ); } @Override - public SearchQueryOptionsStep where( - BiConsumer where( + BiConsumer, ? super SimpleBooleanPredicateClausesCollector> predicateContributor) { return selectEntity().where( predicateContributor ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractDelegatingSearchQuerySelectStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractDelegatingSearchQuerySelectStep.java index 7265fa45c4f..a8c80565fd6 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractDelegatingSearchQuerySelectStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractDelegatingSearchQuerySelectStep.java @@ -24,12 +24,12 @@ public abstract class AbstractDelegatingSearchQuerySelectStep implements SearchQuerySelectStep< - SearchQueryOptionsStep, + SearchQueryOptionsStep, R, E, LOS, SearchProjectionFactory, - SearchPredicateFactory> { + SearchPredicateFactory> { private final SearchQuerySelectStep delegate; @@ -38,52 +38,52 @@ public AbstractDelegatingSearchQuerySelectStep(SearchQuerySelectStep selectEntity() { + public SearchQueryWhereStep selectEntity() { return delegate.selectEntity(); } @Override - public SearchQueryWhereStep selectEntityReference() { + public SearchQueryWhereStep selectEntityReference() { return delegate.selectEntityReference(); } @Override - public

SearchQueryWhereStep select(Class

objectClass) { + public

SearchQueryWhereStep select(Class

objectClass) { return delegate.select( objectClass ); } @Override - public

SearchQueryWhereStep select( + public

SearchQueryWhereStep select( Function, ? extends ProjectionFinalStep

> projectionContributor) { return delegate.select( projectionContributor ); } @Override - public

SearchQueryWhereStep select(SearchProjection

projection) { + public

SearchQueryWhereStep select(SearchProjection

projection) { return delegate.select( projection ); } @Override - public SearchQueryWhereStep, LOS, ?> select( + public SearchQueryWhereStep, LOS, ?> select( SearchProjection... projections) { return delegate.select( projections ); } @Override - public SearchQueryOptionsStep where( - Function predicateContributor) { + public SearchQueryOptionsStep where( + Function, ? extends PredicateFinalStep> predicateContributor) { return delegate.where( predicateContributor ); } @Override - public SearchQueryOptionsStep where( - BiConsumer where( + BiConsumer, ? super SimpleBooleanPredicateClausesCollector> predicateContributor) { return delegate.where( predicateContributor ); } @Override - public SearchQueryOptionsStep where(SearchPredicate predicate) { + public SearchQueryOptionsStep where(SearchPredicate predicate) { return delegate.where( predicate ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractExtendedSearchQueryOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractExtendedSearchQueryOptionsStep.java index 3f111bbbf67..6db9f7bc4a0 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractExtendedSearchQueryOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractExtendedSearchQueryOptionsStep.java @@ -18,16 +18,17 @@ import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; public abstract class AbstractExtendedSearchQueryOptionsStep< - S extends SearchQueryOptionsStep, + E, + S extends SearchQueryOptionsStep, H, R extends SearchResult, SCR extends SearchScroll, LOS, - PDF extends SearchPredicateFactory, - SF extends SearchSortFactory, - AF extends SearchAggregationFactory, + PDF extends SearchPredicateFactory, + SF extends SearchSortFactory, + AF extends SearchAggregationFactory, SC extends SearchQueryIndexScope> - extends AbstractSearchQueryOptionsStep { + extends AbstractSearchQueryOptionsStep { public AbstractExtendedSearchQueryOptionsStep(SC scope, SearchQueryBuilder searchQueryBuilder, diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQueryOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQueryOptionsStep.java index c7992ca8a14..2eef0d788f1 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQueryOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQueryOptionsStep.java @@ -39,14 +39,15 @@ import org.hibernate.search.engine.search.sort.dsl.SortFinalStep; public abstract class AbstractSearchQueryOptionsStep< - S extends SearchQueryOptionsStep, + E, + S extends SearchQueryOptionsStep, H, LOS, - PDF extends SearchPredicateFactory, - SF extends SearchSortFactory, - AF extends SearchAggregationFactory, + PDF extends SearchPredicateFactory, + SF extends SearchSortFactory, + AF extends SearchAggregationFactory, SC extends SearchQueryIndexScope> - implements SearchQueryWhereStep, SearchQueryOptionsStep { + implements SearchQueryWhereStep, SearchQueryOptionsStep { protected final SC scope; private final SearchQueryBuilder searchQueryBuilder; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQuerySelectStep.java b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQuerySelectStep.java index ba2438987a7..1921e31aa7b 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQuerySelectStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/dsl/spi/AbstractSearchQuerySelectStep.java @@ -17,12 +17,12 @@ import org.hibernate.search.engine.search.query.spi.SearchQueryIndexScope; public abstract class AbstractSearchQuerySelectStep< - N extends SearchQueryOptionsStep, + N extends SearchQueryOptionsStep, R, E, LOS, PJF extends SearchProjectionFactory, - PDF extends SearchPredicateFactory> + PDF extends SearchPredicateFactory> implements SearchQuerySelectStep { @Override diff --git a/engine/src/main/java/org/hibernate/search/engine/search/query/spi/SearchQueryIndexScope.java b/engine/src/main/java/org/hibernate/search/engine/search/query/spi/SearchQueryIndexScope.java index b281dfa0b94..2fc0522dc6e 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/query/spi/SearchQueryIndexScope.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/query/spi/SearchQueryIndexScope.java @@ -27,13 +27,13 @@ public interface SearchQueryIndexScope>

SearchQueryBuilder

select(BackendSessionContext sessionContext, SearchLoadingContextBuilder loadingContextBuilder, SearchProjection

projection); - SearchPredicateFactory predicateFactory(); + SearchPredicateFactory predicateFactory(); - SearchSortFactory sortFactory(); + SearchSortFactory sortFactory(); SearchProjectionFactory projectionFactory(); - SearchAggregationFactory aggregationFactory(); + SearchAggregationFactory aggregationFactory(); SearchHighlighterFactory highlighterFactory(); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/FieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/FieldReference.java new file mode 100644 index 00000000000..173c011733e --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/FieldReference.java @@ -0,0 +1,22 @@ +/* + * 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.engine.search.reference.traits; + +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * The most common interface for the field reference hierarchy. + * @param Containing type. + */ +@Incubating +public interface FieldReference { + + String absolutePath(); + + Class containing(); + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/ExistsPredicateFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/ExistsPredicateFieldReference.java new file mode 100644 index 00000000000..17f1c7c8bc4 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/ExistsPredicateFieldReference.java @@ -0,0 +1,4 @@ +package org.hibernate.search.engine.search.reference.traits.predicate; + +public interface ExistsPredicateFieldReference extends PredicateFieldReference { +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/KnnPredicateFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/KnnPredicateFieldReference.java new file mode 100644 index 00000000000..4b452aa910e --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/KnnPredicateFieldReference.java @@ -0,0 +1,4 @@ +package org.hibernate.search.engine.search.reference.traits.predicate; + +public interface KnnPredicateFieldReference extends TypedPredicateFieldReference { +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/MatchPredicateFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/MatchPredicateFieldReference.java new file mode 100644 index 00000000000..6719cedaa34 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/MatchPredicateFieldReference.java @@ -0,0 +1,4 @@ +package org.hibernate.search.engine.search.reference.traits.predicate; + +public interface MatchPredicateFieldReference extends TypedPredicateFieldReference { +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/PredicateFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/PredicateFieldReference.java new file mode 100644 index 00000000000..df7ad24ab83 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/PredicateFieldReference.java @@ -0,0 +1,6 @@ +package org.hibernate.search.engine.search.reference.traits.predicate; + +import org.hibernate.search.engine.search.reference.traits.FieldReference; + +public interface PredicateFieldReference extends FieldReference { +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/TypedPredicateFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/TypedPredicateFieldReference.java new file mode 100644 index 00000000000..fd671b8815f --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/predicate/TypedPredicateFieldReference.java @@ -0,0 +1,13 @@ +package org.hibernate.search.engine.search.reference.traits.predicate; + +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.engine.search.reference.traits.FieldReference; + +public interface TypedPredicateFieldReference extends FieldReference { + + Class predicateType(); + + default ValueConvert valueConvert() { + return ValueConvert.YES; + } +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/FieldProjectionFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/FieldProjectionFieldReference.java new file mode 100644 index 00000000000..8389c2852e6 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/FieldProjectionFieldReference.java @@ -0,0 +1,4 @@ +package org.hibernate.search.engine.search.reference.traits.projection; + +public interface FieldProjectionFieldReference extends TypedProjectionFieldReference { +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/ProjectionFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/ProjectionFieldReference.java new file mode 100644 index 00000000000..de0244ee415 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/ProjectionFieldReference.java @@ -0,0 +1,6 @@ +package org.hibernate.search.engine.search.reference.traits.projection; + +import org.hibernate.search.engine.search.reference.traits.FieldReference; + +public interface ProjectionFieldReference extends FieldReference { +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/TypedProjectionFieldReference.java b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/TypedProjectionFieldReference.java new file mode 100644 index 00000000000..ae67545f47e --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/reference/traits/projection/TypedProjectionFieldReference.java @@ -0,0 +1,12 @@ +package org.hibernate.search.engine.search.reference.traits.projection; + +import org.hibernate.search.engine.search.common.ValueConvert; + +public interface TypedProjectionFieldReference extends ProjectionFieldReference { + + Class projectionType(); + + default ValueConvert valueConvert() { + return ValueConvert.YES; + } +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/CompositeSortComponentsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/CompositeSortComponentsStep.java index 7e063897857..faa6975bbc5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/CompositeSortComponentsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/CompositeSortComponentsStep.java @@ -17,8 +17,8 @@ * * @param The "self" type (the actual exposed type of this step). */ -public interface CompositeSortComponentsStep> - extends SortFinalStep, SortThenStep { +public interface CompositeSortComponentsStep> + extends SortFinalStep, SortThenStep { /** * Add an element to the composite sort based on a previously-built {@link SearchSort}. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java index 3373ae5b549..e6e63f6365c 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java @@ -16,8 +16,8 @@ * @param The "self" type (the actual exposed type of this step). * @param The type of factory used to create predicates in {@link #filter(Function)}. */ -public interface DistanceSortOptionsStep, PDF extends SearchPredicateFactory> - extends SortFinalStep, SortThenStep, SortOrderStep, SortModeStep, SortFilterStep { +public interface DistanceSortOptionsStep, PDF extends SearchPredicateFactory> + extends SortFinalStep, SortThenStep, SortOrderStep, SortModeStep, SortFilterStep { /** * Start describing the behavior of this sort when a document doesn't diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java index 9c294afc98a..54ec1fbc0b5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ExtendedSearchSortFactory.java @@ -22,30 +22,33 @@ * @param The self type, i.e. the exposed type of this factory. * @param The type of factory used to create predicates in {@link FieldSortOptionsStep#filter(Function)}. */ -public interface ExtendedSearchSortFactory, PDF extends SearchPredicateFactory> - extends SearchSortFactory { +public interface ExtendedSearchSortFactory< + E, + S extends ExtendedSearchSortFactory, + PDF extends SearchPredicateFactory> + extends SearchSortFactory { @Override S withRoot(String objectFieldPath); @Override - FieldSortOptionsStep field(String fieldPath); + FieldSortOptionsStep field(String fieldPath); @Override - default FieldSortOptionsStep field(TypedFieldReference field) { + default FieldSortOptionsStep field(TypedFieldReference field) { return field( field.absolutePath() ); } @Override - DistanceSortOptionsStep distance(String fieldPath, GeoPoint location); + DistanceSortOptionsStep distance(String fieldPath, GeoPoint location); @Override - default DistanceSortOptionsStep distance(TypedFieldReference field, GeoPoint location) { + default DistanceSortOptionsStep distance(TypedFieldReference field, GeoPoint location) { return distance( field.absolutePath(), location ); } @Override - default DistanceSortOptionsStep distance(String fieldPath, double latitude, double longitude) { + default DistanceSortOptionsStep distance(String fieldPath, double latitude, double longitude) { return distance( fieldPath, GeoPoint.of( latitude, longitude ) ); } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/FieldSortOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/FieldSortOptionsStep.java index aea4860973d..eb8cdba451e 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/FieldSortOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/FieldSortOptionsStep.java @@ -18,8 +18,8 @@ * * @author Emmanuel Bernard emmanuel@hibernate.org */ -public interface FieldSortOptionsStep, PDF extends SearchPredicateFactory> - extends SortFinalStep, SortThenStep, SortOrderStep, SortModeStep, SortFilterStep { +public interface FieldSortOptionsStep, PDF extends SearchPredicateFactory> + extends SortFinalStep, SortThenStep, SortOrderStep, SortModeStep, SortFilterStep { /** * Start describing the behavior of this sort when a document doesn't diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ScoreSortOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ScoreSortOptionsStep.java index 0e6dcc54f0d..260a9dd0eb4 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ScoreSortOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/ScoreSortOptionsStep.java @@ -13,6 +13,6 @@ * * @author Emmanuel Bernard emmanuel@hibernate.org */ -public interface ScoreSortOptionsStep> - extends SortFinalStep, SortThenStep, SortOrderStep { +public interface ScoreSortOptionsStep> + extends SortFinalStep, SortThenStep, SortOrderStep { } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java index 5d33ce53a6b..738a874b4e7 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactory.java @@ -35,7 +35,7 @@ * * @author Emmanuel Bernard emmanuel@hibernate.org */ -public interface SearchSortFactory { +public interface SearchSortFactory { /** * Order elements by their relevance score. @@ -44,14 +44,14 @@ public interface SearchSortFactory { * * @return A DSL step where the "score" sort can be defined in more details. */ - ScoreSortOptionsStep score(); + ScoreSortOptionsStep score(); /** * Order elements by their internal index order. * * @return A DSL step where the "index order" sort can be defined in more details. */ - SortThenStep indexOrder(); + SortThenStep indexOrder(); /** * Order elements by the value of a specific field. @@ -62,7 +62,7 @@ public interface SearchSortFactory { * @return A DSL step where the "field" sort can be defined in more details. * @throws SearchException If the field doesn't exist or cannot be sorted on. */ - FieldSortOptionsStep field(String fieldPath); + FieldSortOptionsStep> field(String fieldPath); /** * Order elements by the value of a specific field. @@ -74,7 +74,7 @@ public interface SearchSortFactory { * @throws SearchException If the field doesn't exist or cannot be sorted on. */ @Incubating - default FieldSortOptionsStep field(TypedFieldReference field) { + default FieldSortOptionsStep> field(TypedFieldReference field) { return field( field.absolutePath() ); } @@ -89,7 +89,7 @@ public interface SearchSortFactory { * @return A DSL step where the "distance" sort can be defined in more details. * @throws SearchException If the field type does not constitute a valid location. */ - DistanceSortOptionsStep distance(String fieldPath, GeoPoint location); + DistanceSortOptionsStep> distance(String fieldPath, GeoPoint location); /** * Order elements by the distance from the location stored in the specified field to the location specified. @@ -102,7 +102,8 @@ public interface SearchSortFactory { * @return A DSL step where the "distance" sort can be defined in more details. * @throws SearchException If the field type does not constitute a valid location. */ - default DistanceSortOptionsStep distance(TypedFieldReference field, + default DistanceSortOptionsStep> distance( + TypedFieldReference field, GeoPoint location) { return distance( field.absolutePath(), location ); } @@ -119,7 +120,7 @@ public interface SearchSortFactory { * @return A DSL step where the "distance" sort can be defined in more details. * @throws SearchException If the field type does not constitute a valid location. */ - default DistanceSortOptionsStep distance(String fieldPath, double latitude, + default DistanceSortOptionsStep> distance(String fieldPath, double latitude, double longitude) { return distance( fieldPath, GeoPoint.of( latitude, longitude ) ); } @@ -134,7 +135,7 @@ public interface SearchSortFactory { * * @return A DSL step where the "composite" sort can be defined in more details. */ - CompositeSortComponentsStep composite(); + CompositeSortComponentsStep composite(); /** * Order by a sort composed of several elements, @@ -157,7 +158,7 @@ public interface SearchSortFactory { * Should generally be a lambda expression. * @return A DSL step where the "composite" sort can be defined in more details. */ - SortThenStep composite(Consumer> elementContributor); + SortThenStep composite(Consumer> elementContributor); /** * Delegating sort that creates the actual sort at query create time and provides access to query parameters. @@ -168,7 +169,7 @@ public interface SearchSortFactory { * @return A final DSL step in a parameterized sort definition. */ @Incubating - SortThenStep withParameters(Function sortCreator); + SortThenStep withParameters(Function sortCreator); /** * Extend the current factory with the given extension, @@ -190,7 +191,7 @@ public interface SearchSortFactory { * * @return A DSL step. */ - SearchSortFactoryExtensionIfSupportedStep extension(); + SearchSortFactoryExtensionIfSupportedStep extension(); /** * Create a new sort factory whose root for all paths passed to the DSL @@ -203,7 +204,7 @@ public interface SearchSortFactory { * @return A new sort factory using the given object field as root. */ @Incubating - SearchSortFactory withRoot(String objectFieldPath); + SearchSortFactory withRoot(String objectFieldPath); /** * @param relativeFieldPath The path to a field, relative to the {@link #withRoot(String) root} of this factory. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtension.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtension.java index 020c0530695..bdf9317c2ab 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtension.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtension.java @@ -33,6 +33,6 @@ public interface SearchSortFactoryExtension { * @return An optional containing the extended sort factory ({@link T}) in case * of success, or an empty optional otherwise. */ - Optional extendOptional(SearchSortFactory original); + Optional extendOptional(SearchSortFactory original); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedMoreStep.java index ad3135ebac7..0e981a2e2ef 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedMoreStep.java @@ -16,7 +16,7 @@ * * @see SearchSortFactory#extension() */ -public interface SearchSortFactoryExtensionIfSupportedMoreStep extends SearchSortFactoryExtensionIfSupportedStep { +public interface SearchSortFactoryExtensionIfSupportedMoreStep extends SearchSortFactoryExtensionIfSupportedStep { /** * If no extension passed to {@link #ifSupported(SearchSortFactoryExtension, Function)} @@ -29,7 +29,7 @@ public interface SearchSortFactoryExtensionIfSupportedMoreStep extends SearchSor * Should generally be a lambda expression. * @return The final step in the DSL of the resulting sort. */ - SortThenStep orElse(Function sortContributor); + SortThenStep orElse(Function, ? extends SortFinalStep> sortContributor); /** * If no extension passed to {@link #ifSupported(SearchSortFactoryExtension, Function)} @@ -39,6 +39,6 @@ public interface SearchSortFactoryExtensionIfSupportedMoreStep extends SearchSor * @return The final step in the DSL of the resulting sort. * @throws SearchException If none of the previously passed extensions was supported. */ - SortThenStep orElseFail(); + SortThenStep orElseFail(); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedStep.java index fc5654d00db..75e5ff3ec21 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SearchSortFactoryExtensionIfSupportedStep.java @@ -14,7 +14,7 @@ * * @see SearchSortFactory#extension() */ -public interface SearchSortFactoryExtensionIfSupportedStep { +public interface SearchSortFactoryExtensionIfSupportedStep { /** * If the given extension is supported, and none of the previous extensions passed to @@ -33,7 +33,7 @@ public interface SearchSortFactoryExtensionIfSupportedStep { * @param The type of the extended factory. * @return {@code this}, for method chaining. */ - SearchSortFactoryExtensionIfSupportedMoreStep ifSupported( + SearchSortFactoryExtensionIfSupportedMoreStep ifSupported( SearchSortFactoryExtension extension, Function sortContributor ); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortFilterStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortFilterStep.java index 2819c47e8f8..3be8c2be1dc 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortFilterStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortFilterStep.java @@ -19,7 +19,7 @@ * @param The "self" type (the actual exposed type of this step) * @param The type of factory used to create predicates in {@link #filter(Function)}. */ -public interface SortFilterStep { +public interface SortFilterStep> { /** * Filter nested objects from which values will be extracted for this sort. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortThenStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortThenStep.java index a4e07f95a34..c90e88eeddc 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortThenStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/SortThenStep.java @@ -11,13 +11,13 @@ * * @author Emmanuel Bernard emmanuel@hibernate.org */ -public interface SortThenStep extends SortFinalStep { +public interface SortThenStep extends SortFinalStep { /** * Start defining another sort, to be applied after the current one. * * @return The next step. */ - SearchSortFactory then(); + SearchSortFactory then(); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/CompositeSortComponentsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/CompositeSortComponentsStepImpl.java index 4bf321156cc..7e0af245ad6 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/CompositeSortComponentsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/CompositeSortComponentsStepImpl.java @@ -11,23 +11,23 @@ import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext; -public final class CompositeSortComponentsStepImpl - implements CompositeSortComponentsStep { +public final class CompositeSortComponentsStepImpl + implements CompositeSortComponentsStep> { - private SearchSortDslContext dslContext; + private SearchSortDslContext dslContext; - public CompositeSortComponentsStepImpl(SearchSortDslContext dslContext) { + public CompositeSortComponentsStepImpl(SearchSortDslContext dslContext) { this.dslContext = dslContext; } @Override - public CompositeSortComponentsStepImpl add(SearchSort searchSort) { + public CompositeSortComponentsStepImpl add(SearchSort searchSort) { dslContext = dslContext.append( searchSort ); return this; } @Override - public SearchSortFactory then() { + public SearchSortFactory then() { return dslContext.then(); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java index af91fd344c1..aa88cffd5b3 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java @@ -22,15 +22,15 @@ import org.hibernate.search.engine.search.sort.spi.SortTypeKeys; import org.hibernate.search.engine.spatial.GeoPoint; -public class DistanceSortOptionsStepImpl - extends AbstractSortThenStep - implements DistanceSortOptionsStep, PDF>, - DistanceSortMissingValueBehaviorStep> { +public class DistanceSortOptionsStepImpl> + extends AbstractSortThenStep + implements DistanceSortOptionsStep, PDF>, + DistanceSortMissingValueBehaviorStep> { private final DistanceSortBuilder builder; - private final SearchSortDslContext dslContext; + private final SearchSortDslContext dslContext; - public DistanceSortOptionsStepImpl(SearchSortDslContext dslContext, + public DistanceSortOptionsStepImpl(SearchSortDslContext dslContext, String fieldPath, GeoPoint center) { super( dslContext ); this.dslContext = dslContext; @@ -39,19 +39,19 @@ public DistanceSortOptionsStepImpl(SearchSortDslContext dslCon } @Override - public DistanceSortOptionsStepImpl order(SortOrder order) { + public DistanceSortOptionsStepImpl order(SortOrder order) { builder.order( order ); return this; } @Override - public DistanceSortOptionsStepImpl mode(SortMode mode) { + public DistanceSortOptionsStepImpl mode(SortMode mode) { builder.mode( mode ); return this; } @Override - public DistanceSortOptionsStepImpl filter( + public DistanceSortOptionsStepImpl filter( Function clauseContributor) { SearchPredicate predicate = clauseContributor.apply( dslContext.predicateFactory() ).toPredicate(); @@ -59,43 +59,43 @@ public DistanceSortOptionsStepImpl filter( } @Override - public DistanceSortOptionsStepImpl filter(SearchPredicate searchPredicate) { + public DistanceSortOptionsStepImpl filter(SearchPredicate searchPredicate) { builder.filter( searchPredicate ); return this; } @Override - public DistanceSortMissingValueBehaviorStep> missing() { + public DistanceSortMissingValueBehaviorStep> missing() { return this; } @Override - public DistanceSortOptionsStepImpl first() { + public DistanceSortOptionsStepImpl first() { builder.missingFirst(); return this; } @Override - public DistanceSortOptionsStepImpl last() { + public DistanceSortOptionsStepImpl last() { builder.missingLast(); return this; } @Override - public DistanceSortOptionsStepImpl highest() { + public DistanceSortOptionsStepImpl highest() { builder.missingHighest(); return this; } @Override - public DistanceSortOptionsStepImpl lowest() { + public DistanceSortOptionsStepImpl lowest() { builder.missingLowest(); return this; } @Override - public DistanceSortOptionsStepImpl use(GeoPoint value) { + public DistanceSortOptionsStepImpl use(GeoPoint value) { builder.missingAs( value ); return this; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/FieldSortOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/FieldSortOptionsStepImpl.java index c2d2aa1f48d..51850e52bb9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/FieldSortOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/FieldSortOptionsStepImpl.java @@ -22,39 +22,39 @@ import org.hibernate.search.engine.search.sort.spi.FieldSortBuilder; import org.hibernate.search.engine.search.sort.spi.SortTypeKeys; -public class FieldSortOptionsStepImpl - extends AbstractSortThenStep - implements FieldSortOptionsStep, PDF>, - FieldSortMissingValueBehaviorStep> { +public class FieldSortOptionsStepImpl> + extends AbstractSortThenStep + implements FieldSortOptionsStep, PDF>, + FieldSortMissingValueBehaviorStep> { - private final SearchSortDslContext dslContext; + private final SearchSortDslContext dslContext; private final FieldSortBuilder builder; - public FieldSortOptionsStepImpl(SearchSortDslContext dslContext, String fieldPath) { + public FieldSortOptionsStepImpl(SearchSortDslContext dslContext, String fieldPath) { super( dslContext ); this.dslContext = dslContext; this.builder = dslContext.scope().fieldQueryElement( fieldPath, SortTypeKeys.FIELD ); } @Override - public FieldSortOptionsStepImpl order(SortOrder order) { + public FieldSortOptionsStepImpl order(SortOrder order) { builder.order( order ); return this; } @Override - public FieldSortOptionsStepImpl mode(SortMode mode) { + public FieldSortOptionsStepImpl mode(SortMode mode) { builder.mode( mode ); return this; } @Override - public FieldSortMissingValueBehaviorStep> missing() { + public FieldSortMissingValueBehaviorStep> missing() { return this; } @Override - public FieldSortOptionsStepImpl filter( + public FieldSortOptionsStepImpl filter( Function clauseContributor) { SearchPredicate predicate = clauseContributor.apply( dslContext.predicateFactory() ).toPredicate(); @@ -62,37 +62,37 @@ public FieldSortOptionsStepImpl filter( } @Override - public FieldSortOptionsStepImpl filter(SearchPredicate searchPredicate) { + public FieldSortOptionsStepImpl filter(SearchPredicate searchPredicate) { builder.filter( searchPredicate ); return this; } @Override - public FieldSortOptionsStepImpl first() { + public FieldSortOptionsStepImpl first() { builder.missingFirst(); return this; } @Override - public FieldSortOptionsStepImpl last() { + public FieldSortOptionsStepImpl last() { builder.missingLast(); return this; } @Override - public FieldSortOptionsStepImpl highest() { + public FieldSortOptionsStepImpl highest() { builder.missingHighest(); return this; } @Override - public FieldSortOptionsStepImpl lowest() { + public FieldSortOptionsStepImpl lowest() { builder.missingLowest(); return this; } @Override - public FieldSortOptionsStepImpl use(Object value, ValueConvert convert) { + public FieldSortOptionsStepImpl use(Object value, ValueConvert convert) { builder.missingAs( value, convert ); return this; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/ScoreSortOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/ScoreSortOptionsStepImpl.java index 98ec3e75ad0..6b6cabebc21 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/ScoreSortOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/ScoreSortOptionsStepImpl.java @@ -13,19 +13,19 @@ import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext; import org.hibernate.search.engine.search.sort.spi.ScoreSortBuilder; -public final class ScoreSortOptionsStepImpl - extends AbstractSortThenStep - implements ScoreSortOptionsStep { +public final class ScoreSortOptionsStepImpl + extends AbstractSortThenStep + implements ScoreSortOptionsStep> { private final ScoreSortBuilder builder; - public ScoreSortOptionsStepImpl(SearchSortDslContext dslContext) { + public ScoreSortOptionsStepImpl(SearchSortDslContext dslContext) { super( dslContext ); this.builder = dslContext.scope().sortBuilders().score(); } @Override - public ScoreSortOptionsStepImpl order(SortOrder order) { + public ScoreSortOptionsStepImpl order(SortOrder order) { builder.order( order ); return this; } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/SearchSortFactoryExtensionStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/SearchSortFactoryExtensionStep.java index 2f020673c43..6ff95e2c0b9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/SearchSortFactoryExtensionStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/SearchSortFactoryExtensionStep.java @@ -17,22 +17,22 @@ import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext; import org.hibernate.search.engine.search.sort.dsl.spi.StaticSortThenStep; -public final class SearchSortFactoryExtensionStep - implements SearchSortFactoryExtensionIfSupportedMoreStep { +public final class SearchSortFactoryExtensionStep + implements SearchSortFactoryExtensionIfSupportedMoreStep { - private final SearchSortFactory parent; - private final SearchSortDslContext dslContext; + private final SearchSortFactory parent; + private final SearchSortDslContext dslContext; private final DslExtensionState state = new DslExtensionState<>(); - public SearchSortFactoryExtensionStep(SearchSortFactory parent, - SearchSortDslContext dslContext) { + public SearchSortFactoryExtensionStep(SearchSortFactory parent, + SearchSortDslContext dslContext) { this.parent = parent; this.dslContext = dslContext; } @Override - public SearchSortFactoryExtensionIfSupportedMoreStep ifSupported( + public SearchSortFactoryExtensionIfSupportedMoreStep ifSupported( SearchSortFactoryExtension extension, Function sortContributor) { state.ifSupported( extension, extension.extendOptional( parent ), sortContributor ); @@ -40,14 +40,14 @@ public SearchSortFactoryExtensionIfSupportedMoreStep ifSupported( } @Override - public SortThenStep orElse(Function sortContributor) { + public SortThenStep orElse(Function, ? extends SortFinalStep> sortContributor) { SortFinalStep result = state.orElse( parent, sortContributor ); - return new StaticSortThenStep( dslContext, result.toSort() ); + return new StaticSortThenStep<>( dslContext, result.toSort() ); } @Override - public SortThenStep orElseFail() { + public SortThenStep orElseFail() { SortFinalStep result = state.orElseFail(); - return new StaticSortThenStep( dslContext, result.toSort() ); + return new StaticSortThenStep<>( dslContext, result.toSort() ); } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/WithParametersSortFinalStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/WithParametersSortFinalStep.java index 81ed78126eb..a7ece4965ba 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/WithParametersSortFinalStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/WithParametersSortFinalStep.java @@ -15,11 +15,11 @@ import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext; import org.hibernate.search.engine.search.sort.spi.WithParametersSortBuilder; -public class WithParametersSortFinalStep extends AbstractSortThenStep { +public class WithParametersSortFinalStep extends AbstractSortThenStep { private final WithParametersSortBuilder builder; - public WithParametersSortFinalStep(SearchSortDslContext dslContext, + public WithParametersSortFinalStep(SearchSortDslContext dslContext, Function sortCreator) { super( dslContext ); builder = dslContext.scope().sortBuilders().withParameters(); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSearchSortFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSearchSortFactory.java index 2b9a4305df9..b0c4b79bc3d 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSearchSortFactory.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSearchSortFactory.java @@ -32,54 +32,55 @@ import org.hibernate.search.engine.spatial.GeoPoint; public abstract class AbstractSearchSortFactory< - S extends ExtendedSearchSortFactory, + E, + S extends ExtendedSearchSortFactory, SC extends SearchSortIndexScope, - PDF extends SearchPredicateFactory> - implements ExtendedSearchSortFactory { + PDF extends SearchPredicateFactory> + implements ExtendedSearchSortFactory { - protected final SearchSortDslContext dslContext; + protected final SearchSortDslContext dslContext; - public AbstractSearchSortFactory(SearchSortDslContext dslContext) { + public AbstractSearchSortFactory(SearchSortDslContext dslContext) { this.dslContext = dslContext; } @Override - public ScoreSortOptionsStep score() { - return new ScoreSortOptionsStepImpl( dslContext ); + public ScoreSortOptionsStep score() { + return new ScoreSortOptionsStepImpl<>( dslContext ); } @Override - public SortThenStep indexOrder() { + public SortThenStep indexOrder() { return staticThenStep( dslContext.scope().sortBuilders().indexOrder() ); } @Override - public FieldSortOptionsStep field(String fieldPath) { + public FieldSortOptionsStep field(String fieldPath) { return new FieldSortOptionsStepImpl<>( dslContext, fieldPath ); } @Override - public DistanceSortOptionsStep distance(String fieldPath, GeoPoint location) { + public DistanceSortOptionsStep distance(String fieldPath, GeoPoint location) { return new DistanceSortOptionsStepImpl<>( dslContext, fieldPath, location ); } @Override - public CompositeSortComponentsStep composite() { + public CompositeSortComponentsStep composite() { return new CompositeSortComponentsStepImpl( dslContext ); } @Override - public SortThenStep composite(Consumer> elementContributor) { - CompositeSortComponentsStep next = composite(); + public SortThenStep composite(Consumer> elementContributor) { + CompositeSortComponentsStep next = composite(); elementContributor.accept( next ); return next; } @Override - public SortThenStep withParameters(Function sortCreator) { - return new WithParametersSortFinalStep( dslContext, sortCreator ); + public SortThenStep withParameters(Function sortCreator) { + return new WithParametersSortFinalStep<>( dslContext, sortCreator ); } @Override @@ -90,8 +91,8 @@ public T extension(SearchSortFactoryExtension extension) { } @Override - public SearchSortFactoryExtensionIfSupportedStep extension() { - return new SearchSortFactoryExtensionStep( this, dslContext ); + public SearchSortFactoryExtensionIfSupportedStep extension() { + return new SearchSortFactoryExtensionStep<>( this, dslContext ); } @Override @@ -99,8 +100,8 @@ public final String toAbsolutePath(String relativeFieldPath) { return dslContext.scope().toAbsolutePath( relativeFieldPath ); } - protected final SortThenStep staticThenStep(SearchSort sort) { - return new StaticSortThenStep( dslContext, sort ); + protected final SortThenStep staticThenStep(SearchSort sort) { + return new StaticSortThenStep<>( dslContext, sort ); } } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSortThenStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSortThenStep.java index 8cab2200865..ae4a174dd2d 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSortThenStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/AbstractSortThenStep.java @@ -10,17 +10,17 @@ import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; import org.hibernate.search.engine.search.sort.dsl.SortThenStep; -public abstract class AbstractSortThenStep implements SortThenStep { - private final SearchSortDslContext parentDslContext; +public abstract class AbstractSortThenStep implements SortThenStep { + private final SearchSortDslContext parentDslContext; - private SearchSortDslContext selfDslContext; + private SearchSortDslContext selfDslContext; - public AbstractSortThenStep(SearchSortDslContext parentDslContext) { + public AbstractSortThenStep(SearchSortDslContext parentDslContext) { this.parentDslContext = parentDslContext; } @Override - public final SearchSortFactory then() { + public final SearchSortFactory then() { return selfDslContext().then(); } @@ -29,7 +29,7 @@ public SearchSort toSort() { return selfDslContext().toSort(); } - private SearchSortDslContext selfDslContext() { + private SearchSortDslContext selfDslContext() { /* * Postpone the call of build() as long as possible, * and make sure to only call it once, diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/SearchSortDslContext.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/SearchSortDslContext.java index 54e5e97838f..901b35da85d 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/SearchSortDslContext.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/SearchSortDslContext.java @@ -24,26 +24,29 @@ * @param The type of the backend-specific search scope. * @param The type of factory used to create predicates in {@link FieldSortOptionsStep#filter(Function)}. */ -public final class SearchSortDslContext, PDF extends SearchPredicateFactory> { - - public static , PDF extends SearchPredicateFactory> SearchSortDslContext root( - SC scope, - Function, SearchSortFactory> factoryProvider, - PDF predicateFactory) { +public final class SearchSortDslContext, PDF extends SearchPredicateFactory> { + + public static < + E, + SC extends SearchSortIndexScope, + PDF extends SearchPredicateFactory> SearchSortDslContext root( + SC scope, + Function, SearchSortFactory> factoryProvider, + PDF predicateFactory) { return new SearchSortDslContext<>( scope, factoryProvider, null, null, predicateFactory ); } private final SC scope; - private final Function, SearchSortFactory> factoryProvider; - private final SearchSortDslContext parent; + private final Function, SearchSortFactory> factoryProvider; + private final SearchSortDslContext parent; private final SearchSort sort; private final PDF predicateFactory; private SearchSort compositeSort; private SearchSortDslContext(SC scope, - Function, SearchSortFactory> factoryProvider, - SearchSortDslContext parent, SearchSort sort, + Function, SearchSortFactory> factoryProvider, + SearchSortDslContext parent, SearchSort sort, PDF predicateFactory) { this.scope = scope; this.factoryProvider = factoryProvider; @@ -62,7 +65,7 @@ public SC scope() { /** * @return A new factory to be returned by {@link SortThenStep#then()}. */ - public SearchSortFactory then() { + public SearchSortFactory then() { return factoryProvider.apply( this ); } @@ -71,7 +74,7 @@ public SearchSortFactory then() { * @param newPredicateFactory The new predicate factory for the new DSL context. * @return A copy of this DSL context with its scope and predicate factory replaced with the given ones. */ - public SearchSortDslContext rescope(SC newScope, PDF newPredicateFactory) { + public SearchSortDslContext rescope(SC newScope, PDF newPredicateFactory) { return new SearchSortDslContext<>( newScope, factoryProvider, parent, sort, newPredicateFactory ); } @@ -81,7 +84,7 @@ public SearchSortDslContext rescope(SC newScope, PDF newPredicateFactor * @param sort The sort to add. * @return A new DSL context, with the given builder appended. */ - public SearchSortDslContext append(SearchSort sort) { + public SearchSortDslContext append(SearchSort sort) { return new SearchSortDslContext<>( scope, factoryProvider, this, sort, predicateFactory ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/StaticSortThenStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/StaticSortThenStep.java index b9909ce69f5..6eb32236b20 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/StaticSortThenStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/StaticSortThenStep.java @@ -8,10 +8,10 @@ import org.hibernate.search.engine.search.sort.SearchSort; -public final class StaticSortThenStep extends AbstractSortThenStep { +public final class StaticSortThenStep extends AbstractSortThenStep { final SearchSort sort; - public StaticSortThenStep(SearchSortDslContext parentDslContext, SearchSort sort) { + public StaticSortThenStep(SearchSortDslContext parentDslContext, SearchSort sort) { super( parentDslContext ); this.sort = sort; } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/ElasticsearchExtensionIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/ElasticsearchExtensionIT.java index d38ab5045c1..27d9cd59ade 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/ElasticsearchExtensionIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/ElasticsearchExtensionIT.java @@ -111,17 +111,17 @@ void queryContext() { // Put intermediary contexts into variables to check they have the right type ElasticsearchSearchQuerySelectStep context1 = scope.query().extension( ElasticsearchExtension.get() ); - ElasticsearchSearchQueryWhereStep context2 = context1.select( + ElasticsearchSearchQueryWhereStep context2 = context1.select( f -> f.composite() .from( f.documentReference(), f.source() ) // We don't care about the source, it's just to test that the factory context allows ES-specific projection .as( (docRef, source) -> docRef ) ); // Note we can use Elasticsearch-specific predicates immediately - ElasticsearchSearchQueryOptionsStep context3 = + ElasticsearchSearchQueryOptionsStep context3 = context2.where( f -> f.fromJson( "{'match_all': {}}" ) ); // Note we can use Elasticsearch-specific sorts immediately - ElasticsearchSearchQueryOptionsStep context4 = + ElasticsearchSearchQueryOptionsStep context4 = context3.sort( f -> f.fromJson( "{'nativeField_sort1': 'asc'}" ) ); // Put the query and result into variables to check they have the right type @@ -133,16 +133,16 @@ void queryContext() { .hasTotalHitCount( 6 ); // Also check (at compile time) the context type for other asXXX() methods, since we need to override each method explicitly - ElasticsearchSearchQueryWhereStep selectEntityReferenceContext = + ElasticsearchSearchQueryWhereStep selectEntityReferenceContext = scope.query().extension( ElasticsearchExtension.get() ).selectEntityReference(); - ElasticsearchSearchQueryWhereStep selectEntityContext = + ElasticsearchSearchQueryWhereStep selectEntityContext = scope.query().extension( ElasticsearchExtension.get() ).selectEntity(); SearchProjection projection = scope.projection().documentReference().toProjection(); - ElasticsearchSearchQueryWhereStep selectProjectionContext = + ElasticsearchSearchQueryWhereStep selectProjectionContext = scope.query().extension( ElasticsearchExtension.get() ).select( projection ); - ElasticsearchSearchQueryWhereStep, StubLoadingOptionsStep> selectProjectionsContext = + ElasticsearchSearchQueryWhereStep, StubLoadingOptionsStep> selectProjectionsContext = scope.query().extension( ElasticsearchExtension.get() ).select( projection, projection ); - ElasticsearchSearchQueryOptionsStep defaultResultContext = + ElasticsearchSearchQueryOptionsStep defaultResultContext = scope.query().extension( ElasticsearchExtension.get() ) .where( f -> f.fromJson( "{'match_all': {}}" ) ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/search/query/ElasticsearchBoolSearchPredicateIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/search/query/ElasticsearchBoolSearchPredicateIT.java index 831ea7fdc37..2f539a0b216 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/search/query/ElasticsearchBoolSearchPredicateIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/search/query/ElasticsearchBoolSearchPredicateIT.java @@ -34,7 +34,7 @@ void setup() { @Test void resultingQueryOptimization() { - SearchPredicateFactory f = index.createScope().predicate(); + SearchPredicateFactory f = index.createScope().predicate(); assertJsonEqualsIgnoringUnknownFields( "{" + diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendHelper.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendHelper.java index 94da32b6b52..f5b33d227d7 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendHelper.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendHelper.java @@ -8,6 +8,7 @@ import org.hibernate.search.backend.elasticsearch.ElasticsearchExtension; import org.hibernate.search.backend.elasticsearch.cfg.ElasticsearchIndexSettings; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.query.dsl.SearchQueryDslExtension; @@ -101,7 +102,7 @@ public SearchSetupHelper.SetupContext startSetup(SearchSetupHelper.SetupContext } @Override - public PredicateFinalStep createSlowPredicate(SearchPredicateFactory f) { + public PredicateFinalStep createSlowPredicate(SearchPredicateFactory f) { return f.extension( ElasticsearchExtension.get() ) .fromJson( "{\"script\": {" + " \"script\": \"" diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java index 9846112bb0c..b3d46d6bbf0 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java @@ -128,17 +128,17 @@ void queryContext() { // Put intermediary contexts into variables to check they have the right type LuceneSearchQuerySelectStep context1 = scope.query().extension( LuceneExtension.get() ); - LuceneSearchQueryWhereStep context2 = context1.select( + LuceneSearchQueryWhereStep context2 = context1.select( f -> f.composite() .from( f.documentReference(), f.document() ) // We don't care about the document, it's just to test that the factory context allows Lucene-specific projection .as( (docRef, document) -> docRef ) ); // Note we can use Lucene-specific predicates immediately - LuceneSearchQueryOptionsStep context3 = + LuceneSearchQueryOptionsStep context3 = context2.where( f -> f.fromLuceneQuery( new MatchAllDocsQuery() ) ); // Note we can use Lucene-specific sorts immediately - LuceneSearchQueryOptionsStep context4 = + LuceneSearchQueryOptionsStep context4 = context3.sort( f -> f.fromLuceneSortField( new SortedSetSortField( "sort1", false ) ) ); // Put the query and result into variables to check they have the right type @@ -150,16 +150,16 @@ void queryContext() { .hasTotalHitCount( 5 ); // Also check (at compile time) the context type for other asXXX() methods, since we need to override each method explicitly - LuceneSearchQueryWhereStep selectEntityReferenceContext = + LuceneSearchQueryWhereStep selectEntityReferenceContext = scope.query().extension( LuceneExtension.get() ).selectEntityReference(); - LuceneSearchQueryWhereStep selectEntityContext = + LuceneSearchQueryWhereStep selectEntityContext = scope.query().extension( LuceneExtension.get() ).selectEntity(); SearchProjection projection = scope.projection().documentReference().toProjection(); - LuceneSearchQueryWhereStep selectProjectionContext = + LuceneSearchQueryWhereStep selectProjectionContext = scope.query().extension( LuceneExtension.get() ).select( projection ); - LuceneSearchQueryWhereStep, ?> selectProjectionsContext = + LuceneSearchQueryWhereStep, ?> selectProjectionsContext = scope.query().extension( LuceneExtension.get() ).select( projection, projection ); - LuceneSearchQueryOptionsStep defaultResultContext = + LuceneSearchQueryOptionsStep defaultResultContext = scope.query().extension( LuceneExtension.get() ) .where( f -> f.fromLuceneQuery( new MatchAllDocsQuery() ) ); } @@ -375,7 +375,7 @@ void predicate_fromLuceneQuery_separatePredicate() { void predicate_fromLuceneQuery_withRoot() { SearchQuery query = mainIndex.query() .where( f -> { - LuceneSearchPredicateFactory f2 = f.extension( LuceneExtension.get() ).withRoot( "flattenedObject" ); + LuceneSearchPredicateFactory f2 = f.extension( LuceneExtension.get() ).withRoot( "flattenedObject" ); return f2.or( f2.fromLuceneQuery( new TermQuery( new Term( f2.toAbsolutePath( "stringInObject" ), "text 2" ) ) ), f2.fromLuceneQuery( IntPoint.newExactQuery( f2.toAbsolutePath( "integerInObject" ), 3 ) ) ); @@ -479,7 +479,7 @@ void sort_fromLuceneSortField_withRoot() { assertThatQuery( mainIndex.query() .where( f -> f.matchAll() ) .sort( f -> { - LuceneSearchSortFactory f2 = f.extension( LuceneExtension.get() ).withRoot( "flattenedObject" ); + LuceneSearchSortFactory f2 = f.extension( LuceneExtension.get() ).withRoot( "flattenedObject" ); return f2.fromLuceneSortField( new SortedSetSortField( f2.toAbsolutePath( "sortInObject" ), false ) ); } ) ) .hasDocRefHitsExactOrder( mainIndex.typeName(), @@ -488,7 +488,7 @@ void sort_fromLuceneSortField_withRoot() { assertThatQuery( mainIndex.query() .where( f -> f.matchAll() ) .sort( f -> { - LuceneSearchSortFactory f2 = f.extension( LuceneExtension.get() ).withRoot( "flattenedObject" ); + LuceneSearchSortFactory f2 = f.extension( LuceneExtension.get() ).withRoot( "flattenedObject" ); return f2.fromLuceneSortField( new SortedSetSortField( f2.toAbsolutePath( "sortInObject" ), true ) ); } ) ) .hasDocRefHitsExactOrder( mainIndex.typeName(), diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/cache/LuceneQueryCacheConfigurerIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/cache/LuceneQueryCacheConfigurerIT.java index c70aed880e4..504c6cea472 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/cache/LuceneQueryCacheConfigurerIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/cache/LuceneQueryCacheConfigurerIT.java @@ -105,7 +105,7 @@ private void setup(String queryCacheConfigurer, Consumer bi .setup(); } - private SearchQueryOptionsStep matchAllQuery() { + private SearchQueryOptionsStep matchAllQuery() { return index.query() .where( f -> f.matchAll() ); } diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneBoolSearchPredicateIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneBoolSearchPredicateIT.java index 98b54125214..acafb445192 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneBoolSearchPredicateIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneBoolSearchPredicateIT.java @@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.backend.document.IndexFieldReference; import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaElement; import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaObjectField; @@ -57,7 +58,7 @@ void minimumShouldMatch_outOfBounds() { @Test void resultingQueryOptimization() { - SearchPredicateFactory f = index.createScope().predicate(); + SearchPredicateFactory f = index.createScope().predicate(); assertThat( index.query() .where( f.bool() @@ -95,7 +96,7 @@ void resultingQueryOptimization() { @Test void resultingQueryOptimizationWithBoost() { - SearchPredicateFactory f = index.createScope().predicate(); + SearchPredicateFactory f = index.createScope().predicate(); // by default Lucene bool query would have a filter on match all assertThat( index.query() diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneFloatingPointInfinitySearchIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneFloatingPointInfinitySearchIT.java index d16459d433b..2d133a85dca 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneFloatingPointInfinitySearchIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneFloatingPointInfinitySearchIT.java @@ -167,7 +167,7 @@ void double_infinityExcluded() { ); } - private SearchQueryOptionsStep matchAllQuery() { + private SearchQueryOptionsStep matchAllQuery() { return index.createScope().query().where( f -> f.matchAll() ); } diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneSearchTopDocsMergeFieldSortIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneSearchTopDocsMergeFieldSortIT.java index 7b6b2e4ac7f..44d2219c7a0 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneSearchTopDocsMergeFieldSortIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/search/LuceneSearchTopDocsMergeFieldSortIT.java @@ -206,7 +206,7 @@ private LuceneSearchQuery matchNonEmptySortedByFieldQuery(Dat .toQuery(); } - private FieldSortOptionsStep applySortMode(FieldSortOptionsStep optionsStep, SortMode sortMode) { + private FieldSortOptionsStep applySortMode(FieldSortOptionsStep optionsStep, SortMode sortMode) { if ( sortMode != null ) { return optionsStep.mode( sortMode ); } @@ -215,7 +215,7 @@ private LuceneSearchQuery matchNonEmptySortedByFieldQuery(Dat } } - private FieldSortOptionsStep applyFilter(FieldSortOptionsStep optionsStep, + private FieldSortOptionsStep applyFilter(FieldSortOptionsStep optionsStep, TestedFieldStructure fieldStructure) { if ( fieldStructure.isInNested() ) { return optionsStep.filter( f -> f.match() diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/testsupport/util/LuceneTckBackendHelper.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/testsupport/util/LuceneTckBackendHelper.java index 1e2ea499fd6..40731bd82cd 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/testsupport/util/LuceneTckBackendHelper.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/testsupport/util/LuceneTckBackendHelper.java @@ -7,6 +7,7 @@ package org.hibernate.search.integrationtest.backend.lucene.testsupport.util; import org.hibernate.search.backend.lucene.LuceneExtension; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.query.dsl.SearchQueryDslExtension; @@ -84,7 +85,7 @@ public TckBackendSetupStrategy createRarePeriodicRefreshBackendSetupStrategy( } @Override - public PredicateFinalStep createSlowPredicate(SearchPredicateFactory f) { + public PredicateFinalStep createSlowPredicate(SearchPredicateFactory f) { return f.extension( LuceneExtension.get() ) .fromLuceneQuery( new SlowQuery( 100 ) ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/dynamic/ObjectFieldTemplateIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/dynamic/ObjectFieldTemplateIT.java index 83021b2b99a..b4956d9d42e 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/dynamic/ObjectFieldTemplateIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/dynamic/ObjectFieldTemplateIT.java @@ -482,7 +482,7 @@ void exists_dynamicObjectField() { } private SearchQuery query( - Function predicateContributor) { + Function, ? extends PredicateFinalStep> predicateContributor) { return index.createScope().query() .where( predicateContributor ) .toQuery(); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/AggregationBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/AggregationBaseIT.java index 09bc8f122d3..69f74b8828e 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/AggregationBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/AggregationBaseIT.java @@ -153,7 +153,7 @@ private static class ObjectFieldBinding { private static class SupportedExtension implements SearchAggregationFactoryExtension { @Override - public Optional extendOptional(SearchAggregationFactory original) { + public Optional extendOptional(SearchAggregationFactory original) { assertThat( original ).isNotNull(); return Optional.of( new MyExtendedFactory( original ) ); } @@ -161,16 +161,16 @@ public Optional extendOptional(SearchAggregationFactory origi private static class UnSupportedExtension implements SearchAggregationFactoryExtension { @Override - public Optional extendOptional(SearchAggregationFactory original) { + public Optional extendOptional(SearchAggregationFactory original) { assertThat( original ).isNotNull(); return Optional.empty(); } } private static class MyExtendedFactory { - private final SearchAggregationFactory delegate; + private final SearchAggregationFactory delegate; - MyExtendedFactory(SearchAggregationFactory delegate) { + MyExtendedFactory(SearchAggregationFactory delegate) { this.delegate = delegate; } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/RangeAggregationSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/RangeAggregationSpecificsIT.java index 77f9dbbf4a3..8e1dfb8ce11 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/RangeAggregationSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/RangeAggregationSpecificsIT.java @@ -518,7 +518,7 @@ void rangeOverlap_parmeters(FieldTypeDescriptor fieldType, DataSet data AggregationKey, Long>> aggregationKey = AggregationKey.of( AGGREGATION_NAME ); - SearchAggregationFactory af = index.createScope().aggregation(); + SearchAggregationFactory af = index.createScope().aggregation(); var aggregation = af.withParameters( param -> af.range().field( fieldPath, fieldType.getJavaType() ) .range( param.get( "range1", Range.class ) ) @@ -567,7 +567,7 @@ private void assumeNonCanonicalRangesSupported() { ); } - private SearchQueryOptionsStep matchAllQuery() { + private SearchQueryOptionsStep matchAllQuery() { return index.createScope().query().where( f -> f.matchAll() ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/TermsAggregationSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/TermsAggregationSpecificsIT.java index f7aa1e706e1..811bfe1b81d 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/TermsAggregationSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/TermsAggregationSpecificsIT.java @@ -624,7 +624,7 @@ void maxTermCount_veryLarge(FieldTypeDescriptor fieldType, DataSet data ); } - private SearchQueryOptionsStep matchAllQuery() { + private SearchQueryOptionsStep matchAllQuery() { return index.createScope().query().where( f -> f.matchAll() ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/bool/BooleanSortAndRangePredicateIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/bool/BooleanSortAndRangePredicateIT.java index 217b88cca3d..d1f0d13c8a2 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/bool/BooleanSortAndRangePredicateIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/bool/BooleanSortAndRangePredicateIT.java @@ -58,7 +58,7 @@ void setup() { } private SearchQuery sortQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { StubMappingScope scope = index.createScope(); return scope.query() .where( f -> f.matchAll() ) @@ -66,7 +66,7 @@ private SearchQuery sortQuery( .toQuery(); } - private SearchQuery rangeQuery(Function rangePredicate) { + private SearchQuery rangeQuery(Function, PredicateFinalStep> rangePredicate) { StubMappingScope scope = index.createScope(); return scope.query() .where( rangePredicate ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractBaseQueryStringPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractBaseQueryStringPredicateBaseIT.java index 2cd4e24de8c..a01f67ded3f 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractBaseQueryStringPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractBaseQueryStringPredicateBaseIT.java @@ -147,13 +147,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { return f.withParameters( params -> predicate( f ).field( fieldPath ) .matching( params.get( paramName, String.class ) ) ); @@ -197,20 +197,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).field( fieldPath ).field( otherFieldPath ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).field( fieldPath ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); @@ -340,14 +340,14 @@ public void constantScore_fieldLevelBoost(SimpleMappedIndex index, } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).field( fieldPath ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) @@ -355,7 +355,7 @@ protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return predicate( f ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) @@ -363,7 +363,7 @@ protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFac } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return predicate( f ).fields( fieldPaths ) @@ -372,14 +372,14 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f ).field( fieldPath ).boost( fieldBoost ) @@ -388,7 +388,7 @@ protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(Search } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return predicate( f ).field( fieldPath ).boost( fieldBoost ) @@ -463,7 +463,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { predicate( f ).field( fieldPath ); } @@ -511,7 +511,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { predicate( f ).field( fieldPath ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateFieldScoreIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateFieldScoreIT.java index 4238053380c..b60449cec12 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateFieldScoreIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateFieldScoreIT.java @@ -132,7 +132,7 @@ void predicateLevelBoost_multiFields(SimpleMappedIndex index, Data @SuppressWarnings("unchecked") @Override - protected final PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected final PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return predicate( f, field0Path( (SimpleMappedIndex) index, (DataSet) dataSet ), matchingDocOrdinal, @@ -142,7 +142,7 @@ f, field0Path( (SimpleMappedIndex) index, (DataSet) dataSet @SuppressWarnings("unchecked") @Override - protected final PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, + protected final PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return predicateWithPredicateLevelBoost( f, new String[] { field0Path( @@ -156,7 +156,7 @@ protected final PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, @SuppressWarnings("unchecked") @Override - protected final PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected final PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return predicateWithConstantScore( f, new String[] { field0Path( (SimpleMappedIndex) index, (DataSet) dataSet ) }, @@ -166,7 +166,7 @@ protected final PredicateFinalStep predicateWithConstantScore(SearchPredicateFac @SuppressWarnings("unchecked") @Override - protected final PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected final PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return predicateWithConstantScoreAndPredicateLevelBoost( f, @@ -175,28 +175,28 @@ protected final PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPred ); } - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet); - protected abstract PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet); - protected abstract PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet); - protected abstract PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet); - protected abstract PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet); - protected abstract PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet); - protected abstract PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet); private String field0Path(SimpleMappedIndex index, DataSet dataSet) { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateMultiFieldIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateMultiFieldIT.java index e8ea220c7bb..b48c116413b 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateMultiFieldIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateMultiFieldIT.java @@ -89,14 +89,14 @@ void fieldAndFields(SimpleMappedIndex index, DataSet dataSet } } - protected abstract PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected abstract PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet); - protected abstract PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, + protected abstract PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet); - protected abstract PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected abstract PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet); private String field0Path(SimpleMappedIndex index, DataSet dataSet) { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScoreIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScoreIT.java index 7cd6da33d08..00e907a3ba0 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScoreIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScoreIT.java @@ -79,18 +79,18 @@ void constantScore_predicateLevelBoost(StubMappedIndex index, AbstractPredicateD .hasDocRefHitsExactOrder( index.typeName(), dataSet.docId( 0 ), dataSet.docId( 1 ) ); } - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index); - protected abstract PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected abstract PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index); - protected abstract PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index); - protected abstract PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected abstract PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSearchableIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSearchableIT.java index ab72eda4a4e..f95718c5f18 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSearchableIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSearchableIT.java @@ -103,7 +103,7 @@ void multiIndex_incompatibleSearchable(SimpleMappedIndex f, String fieldPath, FieldTypeDescriptor fieldType); protected abstract String predicateTrait(); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSingleFieldIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSingleFieldIT.java index 6ac4381a79f..8fb928de2e2 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSingleFieldIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSingleFieldIT.java @@ -60,10 +60,10 @@ void matchParameter(SimpleMappedIndex index, DataSet dataSet } } - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet); - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet); protected abstract Map parameterValues(int matchingDocOrdinal, DataSet dataSet, String paramName); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java index 0aa76110646..59a25f0307a 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java @@ -41,7 +41,6 @@ import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; import org.hibernate.search.util.impl.test.annotation.TestForIssue; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -573,12 +572,12 @@ void customParser_valueConvertParse_validType(SimpleMappedIndex in } } - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, P matchingParam); + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, P matchingParam); - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, P matchingParam, + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, P matchingParam, ValueConvert valueConvert); - protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, + protected abstract PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, P matchingParam, ValueConvert valueConvert); protected abstract P invalidTypeParam(); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java index 375c421141f..5ee5003bdbf 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java @@ -11,6 +11,7 @@ import java.util.Collection; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaElement; import org.hibernate.search.engine.backend.types.dsl.SearchableProjectableIndexFieldTypeOptionsStep; import org.hibernate.search.engine.reporting.spi.EventContexts; @@ -40,7 +41,7 @@ void trait(SimpleMappedIndex index, FieldTypeDescriptor fiel @ParameterizedTest(name = "{1}") @MethodSource("params") void use(SimpleMappedIndex index, FieldTypeDescriptor fieldType) { - SearchPredicateFactory f = index.createScope().predicate(); + SearchPredicateFactory f = index.createScope().predicate(); String fieldPath = index.binding().field.get( fieldType ).relativeFieldName; @@ -55,7 +56,7 @@ void use(SimpleMappedIndex index, FieldTypeDescriptor fieldT ) ); } - protected abstract void tryPredicate(SearchPredicateFactory f, String fieldPath); + protected abstract void tryPredicate(SearchPredicateFactory f, String fieldPath); protected abstract String predicateTrait(); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AndPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AndPredicateBaseIT.java index 4135c581e27..4f169409d00 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AndPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AndPredicateBaseIT.java @@ -62,13 +62,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -76,14 +76,14 @@ protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int ma } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -119,14 +119,14 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and() .add( f.id().matching( AddScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and( f.id().matching( AddScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -134,7 +134,7 @@ protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int ma } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and() .add( f.id().matching( AddScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -142,7 +142,7 @@ protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.and() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/BoolPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/BoolPredicateBaseIT.java index abfb9d63162..72dd2b9e9ad 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/BoolPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/BoolPredicateBaseIT.java @@ -57,13 +57,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.bool().should( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.bool().should( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -71,14 +71,14 @@ protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int ma } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.bool().should( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.bool().should( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateBaseIT.java index 2b181a609fe..01ad60dcaec 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateBaseIT.java @@ -126,13 +126,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.exists().field( fieldPath ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { assumeTrue( false, "Exists predicate does not have parameters" ); throw new AssertionFailure( "shouldn't reach this far" ); @@ -170,26 +170,26 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ).boost( boost ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ).constantScore().boost( boost ); @@ -374,7 +374,7 @@ void searchable_no_use(SimpleMappedIndex searchab } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.exists().field( fieldPath ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsBaseIT.java index 0a27f5d4bc6..50c789a6c68 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsBaseIT.java @@ -194,26 +194,26 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ).boost( boost ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.exists().field( fieldPath( matchingDocOrdinal, dataSet ) ).constantScore().boost( boost ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/KnnPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/KnnPredicateBaseIT.java index e599b5e09f7..0eba1783265 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/KnnPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/KnnPredicateBaseIT.java @@ -99,14 +99,14 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return knnPredicateOptionsStep( f, fieldPath, matchingDocOrdinal, dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { return f.withParameters( params -> { Object param = params.get( paramName, dataSet.fieldType.getJavaType() ); @@ -209,7 +209,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.knn( 1 ).field( fieldPath ).matching( new byte[] { 1 } ); } @@ -248,7 +248,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { if ( byte[].class.equals( fieldType.getJavaType() ) ) { f.knn( 1 ).field( fieldPath ).matching( new byte[( (VectorFieldTypeDescriptor) fieldType ).vectorSize()] ); @@ -297,46 +297,46 @@ void constantScore_fieldLevelBoost(SimpleMappedIndex index, } @Override - protected KnnPredicateOptionsStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected KnnPredicateOptionsStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return knnPredicateOptionsStep( f, fieldPath, matchingDocOrdinal, dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f, fieldPaths[0], matchingDocOrdinal, dataSet ).constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return predicate( f, fieldPaths[0], matchingDocOrdinal, dataSet ).boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return predicate( f, fieldPaths[0], matchingDocOrdinal, dataSet ).constantScore().boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f, fieldPath, matchingDocOrdinal, dataSet ).constantScore().boost( fieldBoost ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return predicate( f, fieldPath, matchingDocOrdinal, dataSet ).constantScore().constantScore(); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return predicate( f, fieldPath, matchingDocOrdinal, dataSet ).constantScore().boost( fieldBoost ); @@ -347,7 +347,7 @@ private static KnnPredicateTestValues testValues(FieldTypeDescriptor( fieldType ); } - private static KnnPredicateOptionsStep knnPredicateOptionsStep(SearchPredicateFactory f, String fieldPath, + private static KnnPredicateOptionsStep knnPredicateOptionsStep(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, F matchingArg) { if ( matchingArg instanceof byte[] ) { return f.knn( 1 ).field( fieldPath ).matching( ( (byte[]) matchingArg ) ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchAllPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchAllPredicateBaseIT.java index f19bb6a5e78..564c3f40a0a 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchAllPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchAllPredicateBaseIT.java @@ -118,13 +118,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.matchAll().except( f.id().matchingAny( ScoreConfigured.dataSet.docIdsExcept( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.matchAll().except( f.id().matchingAny( ScoreConfigured.dataSet.docIdsExcept( matchingDocOrdinal ) ) ) @@ -132,14 +132,14 @@ protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int ma } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.matchAll().except( f.id().matchingAny( ScoreConfigured.dataSet.docIdsExcept( matchingDocOrdinal ) ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.matchAll().except( f.id().matchingAny( ScoreConfigured.dataSet.docIdsExcept( matchingDocOrdinal ) ) ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateBaseIT.java index 8ece1bee999..db3ae30176c 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateBaseIT.java @@ -107,26 +107,26 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ).boost( boost ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ).constantScore().boost( boost ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateBaseIT.java index 0671a435526..d7339b964bb 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateBaseIT.java @@ -159,13 +159,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.match().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { return f.withParameters( params -> f.match().field( fieldPath ) .matching( params.get( paramName, dataSet.fieldType.getJavaType() ), ValueConvert.YES ) ); @@ -203,20 +203,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.match().field( fieldPath ).field( otherFieldPath ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.match().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.match().field( fieldPath ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); @@ -321,14 +321,14 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.match().field( fieldPath ) .matching( ( (DataSet>) dataSet ).values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.match().fields( fieldPaths ) .matching( ( (DataSet>) dataSet ).values.matchingArg( matchingDocOrdinal ) ) @@ -336,7 +336,7 @@ protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.match().fields( fieldPaths ) .matching( ( (DataSet>) dataSet ).values.matchingArg( matchingDocOrdinal ) ) @@ -344,7 +344,7 @@ protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFac } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.match().fields( fieldPaths ) @@ -353,14 +353,14 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return f.match().field( fieldPath ).boost( fieldBoost ) .matching( ( (DataSet>) dataSet ).values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return f.match().field( fieldPath ).boost( fieldBoost ) .matching( ( (DataSet>) dataSet ).values.matchingArg( matchingDocOrdinal ) ) @@ -368,7 +368,7 @@ protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(Search } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.match().field( fieldPath ).boost( fieldBoost ) @@ -423,7 +423,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.match().field( fieldPath ); } @@ -462,7 +462,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.match().field( fieldPath ); } @@ -548,18 +548,18 @@ public static List integerIndexParams() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam) { + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam) { return f.match().field( fieldPath ).matching( matchingParam ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam, ValueConvert valueConvert) { return f.match().field( fieldPath ).matching( matchingParam, valueConvert ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, Object matchingParam, ValueConvert valueConvert) { return f.match().field( field0Path ).field( field1Path ).matching( matchingParam, valueConvert ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateLegacyIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateLegacyIT.java index 1d6be44b062..8b2dcf5aa9d 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateLegacyIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateLegacyIT.java @@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hibernate.search.util.impl.integrationtest.common.assertion.SearchResultAssert.assertThatQuery; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.backend.document.DocumentElement; import org.hibernate.search.engine.backend.document.IndexFieldReference; import org.hibernate.search.engine.backend.document.IndexObjectFieldReference; @@ -245,7 +246,7 @@ void invalidNestedPath_sibling() { @TestForIssue(jiraKey = "HSEARCH-4173") void multiIndex_missingNestedField() { StubMappingScope scope = mainIndex.createScope( missingFieldIndex ); - SearchPredicateFactory f = scope.predicate(); + SearchPredicateFactory f = scope.predicate(); SearchPredicate nestedPredicate = f.nested().objectField( "nestedObject" ) .nest( f.and( // This is referred to as "condition 1" in the data initialization method diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateSpecificsIT.java index f2def7097db..0e44ce50182 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NestedPredicateSpecificsIT.java @@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hibernate.search.util.impl.integrationtest.common.assertion.SearchResultAssert.assertThatQuery; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.backend.document.DocumentElement; import org.hibernate.search.engine.backend.document.IndexFieldReference; import org.hibernate.search.engine.backend.document.IndexObjectFieldReference; @@ -271,7 +272,7 @@ void invalidNestedPath_sibling() { @TestForIssue(jiraKey = "HSEARCH-4173") void multiIndex_missingNestedField() { StubMappingScope scope = mainIndex.createScope( missingFieldIndex ); - SearchPredicateFactory f = scope.predicate(); + SearchPredicateFactory f = scope.predicate(); SearchPredicate nestedPredicate = f.nested( "nestedObject" ) // This is referred to as "condition 1" in the data initialization method .add( f.nested( "nestedObject.nestedObject" ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateBaseIT.java index 17a40e58402..46e0bcb38fd 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateBaseIT.java @@ -59,27 +59,27 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.not( f.id().matchingAny( ( (DataSet) dataSet ).docsExcept( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.not( f.id().matchingAny( ( (DataSet) dataSet ).docsExcept( matchingDocOrdinal ) ) ) .boost( boost ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.not( f.id().matchingAny( ( (DataSet) dataSet ).docsExcept( matchingDocOrdinal ) ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.not( f.id().matchingAny( ( (DataSet) dataSet ).docsExcept( matchingDocOrdinal ) ) ) .constantScore() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateSpecificsIT.java index 706472ec653..c903e707327 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NotPredicateSpecificsIT.java @@ -94,7 +94,7 @@ void mustWithNotInside() { @Test void manyNestedNot() { - SearchPredicateFactory f = index.createScope().predicate(); + SearchPredicateFactory f = index.createScope().predicate(); assertThatQuery( index.query() .where( f.bool() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/OrPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/OrPredicateBaseIT.java index 8880e1fb6d8..ff78188d5dc 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/OrPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/OrPredicateBaseIT.java @@ -62,13 +62,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -76,14 +76,14 @@ protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int ma } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or( f.id().matching( ScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -119,14 +119,14 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or() .add( f.id().matching( AddScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ); } @Override - protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or() @@ -135,7 +135,7 @@ protected PredicateFinalStep predicateWithBoost(SearchPredicateFactory f, int ma } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, int matchingDocOrdinal, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or() .add( f.id().matching( AddScoreConfigured.dataSet.docId( matchingDocOrdinal ) ) ) @@ -143,7 +143,7 @@ protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f } @Override - protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndBoost(SearchPredicateFactory f, int matchingDocOrdinal, float boost, AbstractPredicateDataSet dataSet, StubMappedIndex index) { return f.or() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/PhrasePredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/PhrasePredicateBaseIT.java index 9246a9d735d..636804164d2 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/PhrasePredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/PhrasePredicateBaseIT.java @@ -145,13 +145,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet) { return f.withParameters( params -> f.phrase().field( fieldPath ) .matching( params.get( paramName, String.class ) ) ); @@ -189,20 +189,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().field( fieldPath ).field( otherFieldPath ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().field( fieldPath ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); @@ -318,27 +318,27 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.phrase().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) .boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.phrase().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) @@ -346,21 +346,21 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.phrase().field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.phrase().field( fieldPath ).boost( fieldBoost ) @@ -414,7 +414,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.phrase().field( fieldPath ); } @@ -453,7 +453,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.phrase().field( fieldPath ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RangePredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RangePredicateBaseIT.java index a3ba5d344b8..5e02e523515 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RangePredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RangePredicateBaseIT.java @@ -160,13 +160,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.range().field( fieldPath ).range( dataSet.values.matchingRange( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { return f.withParameters( params -> f.range().field( fieldPath ) .range( params.get( paramName, Range.class ) ) ); @@ -204,20 +204,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.range().field( fieldPath ).field( otherFieldPath ) .range( dataSet.values.matchingRange( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.range().fields( fieldPaths ).range( dataSet.values.matchingRange( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.range().field( fieldPath ).fields( fieldPaths ) .range( dataSet.values.matchingRange( matchingDocOrdinal ) ); @@ -310,26 +310,26 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.range().field( fieldPath ).range( dataSet.values.matchingRange( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.range().fields( fieldPaths ).range( dataSet.values.matchingRange( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.range().fields( fieldPaths ).range( dataSet.values.matchingRange( matchingDocOrdinal ) ) .boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.range().fields( fieldPaths ).range( dataSet.values.matchingRange( matchingDocOrdinal ) ) @@ -337,21 +337,21 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return f.range().field( fieldPath ).boost( fieldBoost ) .range( dataSet.values.matchingRange( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return f.range().field( fieldPath ).boost( fieldBoost ) .range( dataSet.values.matchingRange( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.range().field( fieldPath ).boost( fieldBoost ) @@ -405,7 +405,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.range().field( fieldPath ); } @@ -444,7 +444,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.range().field( fieldPath ); } @@ -544,18 +544,18 @@ public static List integerIndexParams() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Range rangeParam) { + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Range rangeParam) { return f.range().field( fieldPath ).range( rangeParam ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Range rangeParam, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Range rangeParam, ValueConvert valueConvert) { return f.range().field( fieldPath ).range( rangeParam, valueConvert ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, Range rangeParam, ValueConvert valueConvert) { return f.range().field( field0Path ).field( field1Path ).range( rangeParam, valueConvert ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RegexpPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RegexpPredicateBaseIT.java index f6bd56bb1c7..0bc54d69770 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RegexpPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/RegexpPredicateBaseIT.java @@ -131,13 +131,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet) { return f.withParameters( params -> f.regexp().field( fieldPath ) .matching( params.get( paramName, String.class ) ) ); @@ -175,20 +175,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().field( fieldPath ).field( otherFieldPath ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().field( fieldPath ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); @@ -255,27 +255,27 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.regexp().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) .boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.regexp().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) @@ -283,21 +283,21 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.regexp().field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.regexp().field( fieldPath ).boost( fieldBoost ) @@ -351,7 +351,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.regexp().field( fieldPath ); } @@ -391,7 +391,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.regexp().field( fieldPath ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinBoundingBoxPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinBoundingBoxPredicateBaseIT.java index f6e0d04e436..fb3fd405b3a 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinBoundingBoxPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinBoundingBoxPredicateBaseIT.java @@ -126,13 +126,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boundingBox( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet) { return f.withParameters( params -> f.spatial().within().field( fieldPath ) .boundingBox( params.get( paramName, GeoBoundingBox.class ) ) ); @@ -164,7 +164,7 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).field( otherFieldPath ) @@ -172,14 +172,14 @@ protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .boundingBox( MultiFieldConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).fields( fieldPaths ) @@ -237,28 +237,28 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ) .boundingBox( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .boundingBox( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .boundingBox( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ).boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) @@ -266,14 +266,14 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) .boundingBox( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) @@ -281,7 +281,7 @@ protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(Search } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) @@ -337,7 +337,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.spatial().within().field( fieldPath ) // We need this because the backend is not involved before the call to boundingBox() .boundingBox( 0.0, 0.0, 0.1, 0.1 ); @@ -372,7 +372,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.spatial().within().field( fieldPath ) // We need this because the backend is not involved before the call to boundingBox() .boundingBox( 0.0, 0.0, 0.1, 0.1 ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinCirclePredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinCirclePredicateBaseIT.java index 14345f0f517..b71a0d71dd8 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinCirclePredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinCirclePredicateBaseIT.java @@ -128,7 +128,7 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ) .circle( SingleFieldConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -136,7 +136,7 @@ protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPat } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet) { return f.withParameters( params -> f.spatial().within().field( fieldPath ) .circle( params.get( paramName + "_center", GeoPoint.class ), @@ -173,7 +173,7 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).field( otherFieldPath ) .circle( MultiFieldConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -181,7 +181,7 @@ protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .circle( MultiFieldConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -189,7 +189,7 @@ protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[ } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).fields( fieldPaths ) .circle( MultiFieldConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -245,7 +245,7 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ) .circle( ScoreConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -253,7 +253,7 @@ protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPat } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .circle( ScoreConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -262,7 +262,7 @@ protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .circle( ScoreConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -271,7 +271,7 @@ protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFac } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) @@ -281,7 +281,7 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) .circle( ScoreConfigured.dataSet.values.matchingCenter( matchingDocOrdinal ), @@ -289,7 +289,7 @@ protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) @@ -299,7 +299,7 @@ protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(Search } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) @@ -357,7 +357,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.spatial().within().field( fieldPath ) // We need this because the backend is not involved before the call to circle() .circle( GeoPoint.of( 0, 0 ), 1 ); @@ -392,7 +392,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.spatial().within().field( fieldPath ) // We need this because the backend is not involved before the call to circle() .circle( GeoPoint.of( 0, 0 ), 1 ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinPolygonPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinPolygonPredicateBaseIT.java index 488121b7378..dbf5333077c 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinPolygonPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/SpatialWithinPolygonPredicateBaseIT.java @@ -130,14 +130,14 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ) .polygon( SingleFieldConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet) { return f.withParameters( params -> f.spatial().within().field( fieldPath ) .polygon( params.get( paramName, GeoPolygon.class ) ) ); @@ -168,21 +168,21 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).field( otherFieldPath ) .polygon( MultiFieldConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .polygon( MultiFieldConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).fields( fieldPaths ) @@ -237,28 +237,28 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ) .polygon( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .polygon( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) .polygon( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ).boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().fields( fieldPaths ) @@ -267,14 +267,14 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) .polygon( ScoreConfigured.dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) @@ -283,7 +283,7 @@ protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(Search } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.spatial().within().field( fieldPath ).boost( fieldBoost ) @@ -339,7 +339,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.spatial().within().field( fieldPath ) // We need this because the backend is not involved before the call to polygon() .polygon( unsusedPolygon() ); @@ -381,7 +381,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.spatial().within().field( fieldPath ) // We need this because the backend is not involved before the call to polygon() .polygon( unsusedPolygon() ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/TermsPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/TermsPredicateBaseIT.java index bde2b10d3e6..c1a23c6b6d9 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/TermsPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/TermsPredicateBaseIT.java @@ -159,13 +159,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().field( fieldPath ).matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { return f.withParameters( params -> f.terms().field( fieldPath ) .matchingAny( params.get( paramName, dataSet.fieldType.getJavaType() ) ) ); @@ -204,7 +204,7 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { assumeTrue( TckConfiguration.get().getBackendFeatures().canPerformTermsQuery( dataSet.fieldType ) @@ -221,7 +221,7 @@ protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPat } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet> dataSet) { return f.withParameters( params -> f.terms().field( fieldPath ) .matchingAny( params.get( paramName, Collection.class ) ) ); @@ -270,20 +270,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().field( fieldPath ).field( otherFieldPath ) .matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().fields( fieldPaths ).matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().field( fieldPath ).fields( fieldPaths ) .matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ); @@ -353,27 +353,27 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().field( fieldPath ).matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().fields( fieldPaths ).matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.terms().fields( fieldPaths ).matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ) .boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.terms().fields( fieldPaths ).matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ) @@ -381,21 +381,21 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().field( fieldPath ).boost( fieldBoost ) .matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet> dataSet) { return f.terms().field( fieldPath ).boost( fieldBoost ) .matchingAny( dataSet.values.matchingArg( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet> dataSet) { return f.terms().field( fieldPath ).boost( fieldBoost ) @@ -450,7 +450,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.terms().field( fieldPath ); } @@ -489,7 +489,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.terms().field( fieldPath ); } @@ -578,18 +578,18 @@ public static List integerIndexParams() { @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam) { + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam) { return f.terms().field( fieldPath ).matchingAny( matchingParam ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, Object matchingParam, ValueConvert valueConvert) { return f.terms().field( fieldPath ).matchingAny( Collections.singletonList( matchingParam ), valueConvert ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String field0Path, String field1Path, Object matchingParam, ValueConvert valueConvert) { return f.terms().field( field0Path ).field( field1Path ) .matchingAny( Collections.singletonList( matchingParam ), valueConvert ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/WildcardPredicateBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/WildcardPredicateBaseIT.java index 7f50beefa4b..a10c6ffc3b5 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/WildcardPredicateBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/WildcardPredicateBaseIT.java @@ -131,13 +131,13 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, String paramName, DataSet dataSet) { return f.withParameters( params -> f.wildcard().field( fieldPath ) .matching( params.get( paramName, String.class ) ) ); @@ -175,20 +175,20 @@ public static List params() { } @Override - protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndField(SearchPredicateFactory f, String fieldPath, String otherFieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().field( fieldPath ).field( otherFieldPath ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, + protected PredicateFinalStep predicateOnFields(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateOnFieldAndFields(SearchPredicateFactory f, String fieldPath, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().field( fieldPath ).fields( fieldPaths ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); @@ -255,27 +255,27 @@ public static List params() { } @Override - protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, + protected PredicateFinalStep predicate(SearchPredicateFactory f, String fieldPath, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().field( fieldPath ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithConstantScore(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) .constantScore(); } @Override - protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, + protected PredicateFinalStep predicateWithPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.wildcard().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) .boost( predicateBoost ); } @Override - protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(SearchPredicateFactory f, String[] fieldPaths, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.wildcard().fields( fieldPaths ).matching( dataSet.values.matchingArg( matchingDocOrdinal ) ) @@ -283,21 +283,21 @@ protected PredicateFinalStep predicateWithConstantScoreAndPredicateLevelBoost(Se } @Override - protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, + protected PredicateFinalStep predicateWithFieldLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndConstantScore(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, DataSet dataSet) { return f.wildcard().field( fieldPath ).boost( fieldBoost ) .matching( dataSet.values.matchingArg( matchingDocOrdinal ) ).constantScore(); } @Override - protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, + protected PredicateFinalStep predicateWithFieldLevelBoostAndPredicateLevelBoost(SearchPredicateFactory f, String fieldPath, float fieldBoost, int matchingDocOrdinal, float predicateBoost, DataSet dataSet) { return f.wildcard().field( fieldPath ).boost( fieldBoost ) @@ -351,7 +351,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath) { f.wildcard().field( fieldPath ); } @@ -390,7 +390,7 @@ public static List params() { } @Override - protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { + protected void tryPredicate(SearchPredicateFactory f, String fieldPath, FieldTypeDescriptor fieldType) { f.wildcard().field( fieldPath ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionMultiValuedBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionMultiValuedBaseIT.java index 20ba5574b2b..268f51e1298 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionMultiValuedBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionMultiValuedBaseIT.java @@ -386,7 +386,7 @@ private static List divideAll(List distances, double denominator return distances.stream().map( v -> v / denominator ).collect( Collectors.toList() ); } - protected abstract void addParameter(SearchQueryOptionsStep query, String parameterName, Object value); + protected abstract void addParameter(SearchQueryOptionsStep query, String parameterName, Object value); protected abstract ProjectionFinalStep> distance( SearchProjectionFactory projection, String path, GeoPoint center, @@ -396,7 +396,7 @@ protected abstract ProjectionFinalStep> distance( SearchProjectionFactory projection, String path, GeoPoint center, DistanceUnit unit, String centerParam, String unitParam); - protected abstract SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, + protected abstract SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName); private static class DataSet { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionSingleValuedBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionSingleValuedBaseIT.java index 1d3051a00b5..c348f7ef02d 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionSingleValuedBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractDistanceProjectionSingleValuedBaseIT.java @@ -441,7 +441,7 @@ private String getFieldPath(TestedFieldStructure fieldStructure) { return mainIndex.binding().getFieldPath( fieldStructure, fieldType ); } - protected abstract void addParameter(SearchQueryOptionsStep query, String parameterName, Object value); + protected abstract void addParameter(SearchQueryOptionsStep query, String parameterName, Object value); protected abstract ProjectionFinalStep distance( SearchProjectionFactory projection, String path, GeoPoint center, @@ -455,7 +455,7 @@ protected abstract ProjectionFinalStep distance( SearchProjectionFactory projection, String path, GeoPoint center, DistanceUnit unit, String centerParam, String unitParam); - protected abstract SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, + protected abstract SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName); private static class DataSet { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityProjectionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityProjectionIT.java index 577513ed00a..788ecf2eeba 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityProjectionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityProjectionIT.java @@ -87,7 +87,7 @@ protected AbstractEntityProjectionIT(SimpleMappedIndex mainIndex, this.multiIndex4 = multiIndex4; } - public abstract SearchQueryWhereStep select( + public abstract SearchQueryWhereStep select( SearchQuerySelectStep step); @Test diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityReferenceProjectionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityReferenceProjectionIT.java index 23695a2928b..34bd3066903 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityReferenceProjectionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/AbstractEntityReferenceProjectionIT.java @@ -49,7 +49,7 @@ protected AbstractEntityReferenceProjectionIT(StubMappedIndex mainIndex) { this.mainIndex = mainIndex; } - public abstract SearchQueryWhereStep select( + public abstract SearchQueryWhereStep select( SearchQuerySelectStep step); @Test diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionMultiValuedBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionMultiValuedBaseIT.java index 099b290eb96..4433522d3e3 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionMultiValuedBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionMultiValuedBaseIT.java @@ -21,7 +21,7 @@ class DistanceProjectionMultiValuedBaseIT extends AbstractDistanceProjectionMultiValuedBaseIT { @Override - protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { + protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { // do nothing } @@ -40,7 +40,7 @@ protected ProjectionFinalStep> distance( } @Override - protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, + protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { return sort.distance( path, center ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterMultiValuedBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterMultiValuedBaseIT.java index 114d4026a1b..3c6cd021951 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterMultiValuedBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterMultiValuedBaseIT.java @@ -23,7 +23,7 @@ class DistanceProjectionParameterMultiValuedBaseIT extends AbstractDistanceProjectionMultiValuedBaseIT { @Override - protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { + protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { query.param( parameterName, value ); } @@ -45,7 +45,7 @@ protected ProjectionFinalStep> distance( } @Override - protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { + protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { return sort.withParameters( param -> sort.distance( path, param.get( parameterName, GeoPoint.class ) ) ); } } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterSingleValuedBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterSingleValuedBaseIT.java index feae47392ee..41fe410ba98 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterSingleValuedBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionParameterSingleValuedBaseIT.java @@ -22,7 +22,7 @@ class DistanceProjectionParameterSingleValuedBaseIT extends AbstractDistanceProj @Override - protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { + protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { query.param( parameterName, value ); } @@ -52,7 +52,7 @@ protected ProjectionFinalStep distance( } @Override - protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { + protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { return sort.withParameters( param -> sort.distance( path, param.get( parameterName, GeoPoint.class ) ) ); } } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionSingleValuedBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionSingleValuedBaseIT.java index 598bb72d9dc..dd24480e0c5 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionSingleValuedBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/DistanceProjectionSingleValuedBaseIT.java @@ -24,7 +24,7 @@ class DistanceProjectionSingleValuedBaseIT extends AbstractDistanceProjectionSin @Override - protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { + protected void addParameter(SearchQueryOptionsStep query, String parameterName, Object value) { // do nothing } @@ -50,7 +50,7 @@ protected DistanceToFieldProjectionOptionsStep distance( } @Override - protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { + protected SortFinalStep sort(SearchSortFactory sort, String path, GeoPoint center, String parameterName) { return sort.distance( path, center ); } } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityProjectionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityProjectionIT.java index 7225519dbf3..76e7ce988d7 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityProjectionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityProjectionIT.java @@ -81,7 +81,7 @@ static void setup() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.select( f -> f.entity() ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityReferenceProjectionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityReferenceProjectionIT.java index 0ae601e45ed..cdbfae878ee 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityReferenceProjectionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/projection/EntityReferenceProjectionIT.java @@ -36,7 +36,7 @@ static void setup() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.select( f -> f.entityReference() ); } } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryBaseIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryBaseIT.java index f97c17f35bd..b496089e3ef 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryBaseIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryBaseIT.java @@ -271,7 +271,7 @@ private static T assertParameters(NamedValues params, T factory, AtomicInteg return factory; } - private SearchQueryOptionsStep matchAllSortedByScoreQuery() { + private SearchQueryOptionsStep matchAllSortedByScoreQuery() { return index.query() .where( f -> f.matchAll() ); } @@ -282,7 +282,7 @@ private static T assertParameters(NamedValues params, T factory, AtomicInteg * because optimizations are possible with MatchAllDocsQuery that would allow Hibernate Search * to return an exact total hit count in constant time, ignoring the total hit count threshold. */ - private SearchQueryOptionsStep matchAllWithConditionSortedByScoreQuery() { + private SearchQueryOptionsStep matchAllWithConditionSortedByScoreQuery() { return index.query() .where( f -> f.exists().field( "string" ) ); } @@ -371,9 +371,9 @@ public Optional> extendOptional(SearchQuerySelectStep { - private final SearchQueryWhereStep delegate; + private final SearchQueryWhereStep delegate; - MyExtendedDslContext(SearchQueryWhereStep delegate) { + MyExtendedDslContext(SearchQueryWhereStep delegate) { this.delegate = delegate; } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryFetchIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryFetchIT.java index bb7c1a64677..549bebcdbfb 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryFetchIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryFetchIT.java @@ -368,33 +368,33 @@ void maxResults_zero() { .hasNoHits(); } - private SearchQueryOptionsStep matchAllQuerySortByField() { + private SearchQueryOptionsStep matchAllQuerySortByField() { StubMappingScope scope = index.createScope(); return scope.query() .where( f -> f.matchAll() ) .sort( f -> f.field( "integer" ).asc() ); } - private SearchQueryOptionsStep matchAllQuerySortByDefault() { + private SearchQueryOptionsStep matchAllQuerySortByDefault() { StubMappingScope scope = index.createScope(); return scope.query().where( f -> f.simpleQueryString().field( "text" ) .matching( "mostimportantword^100 lessimportantword^10 leastimportantword^0.1" ) ); } - private SearchQueryOptionsStep matchFirstHalfQuery() { + private SearchQueryOptionsStep matchFirstHalfQuery() { StubMappingScope scope = index.createScope(); return scope.query() .where( f -> f.range().field( "integer" ).lessThan( DOCUMENT_COUNT / 2 ) ) .sort( f -> f.field( "integer" ).asc() ); } - private SearchQueryOptionsStep matchOneQuery(int id) { + private SearchQueryOptionsStep matchOneQuery(int id) { StubMappingScope scope = index.createScope(); return scope.query() .where( f -> f.match().field( "integer" ).matching( id ) ); } - private SearchQueryOptionsStep matchNoneQuery() { + private SearchQueryOptionsStep matchNoneQuery() { StubMappingScope scope = index.createScope(); return scope.query() .where( f -> f.match().field( "integer" ).matching( DOCUMENT_COUNT + 2 ) ); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryScrollIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryScrollIT.java index bbad5cbf575..e06f24c0202 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryScrollIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryScrollIT.java @@ -258,7 +258,7 @@ private void checkScrolling(SearchScroll scroll, int document assertThat( scrollResult.hasHits() ).isFalse(); } - private SearchQueryOptionsStep matchAllQuery() { + private SearchQueryOptionsStep matchAllQuery() { return index.query() .where( f -> f.matchAll() ) .sort( f -> f.field( "integer" ).asc() ); @@ -270,23 +270,23 @@ private void checkScrolling(SearchScroll scroll, int document * because optimizations are possible with MatchAllDocsQuery that would allow Hibernate Search * to return an exact total hit count in constant time, ignoring the total hit count threshold. */ - private SearchQueryOptionsStep matchAllWithConditionSortedByScoreQuery() { + private SearchQueryOptionsStep matchAllWithConditionSortedByScoreQuery() { return index.query() .where( f -> f.exists().field( "integer" ) ); } - private SearchQueryOptionsStep matchFirstHalfQuery() { + private SearchQueryOptionsStep matchFirstHalfQuery() { return index.query() .where( f -> f.range().field( "integer" ).lessThan( DOCUMENT_COUNT / 2 ) ) .sort( f -> f.field( "integer" ).asc() ); } - private SearchQueryOptionsStep matchOneQuery(int id) { + private SearchQueryOptionsStep matchOneQuery(int id) { return index.query() .where( f -> f.match().field( "integer" ).matching( id ) ); } - private SearchQueryOptionsStep matchNoneQuery() { + private SearchQueryOptionsStep matchNoneQuery() { return index.query() .where( f -> f.match().field( "integer" ).matching( DOCUMENT_COUNT + 2 ) ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQuerySelectIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQuerySelectIT.java index c59c66ae86a..eda203fca49 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQuerySelectIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQuerySelectIT.java @@ -76,7 +76,7 @@ public SelectDefaultIT() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step; } } @@ -90,7 +90,7 @@ public SelectEntityIT() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.selectEntity(); } } @@ -102,7 +102,7 @@ public SelectEntityReferenceIT() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.selectEntityReference(); } } @@ -120,7 +120,7 @@ public SelectDefaultWithExtensionIT() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.extension( TckConfiguration.get().getBackendHelper().queryDslExtension() ); } } @@ -134,7 +134,7 @@ public SelectEntityWithExtensionIT() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.extension( TckConfiguration.get().getBackendHelper().queryDslExtension() ) .selectEntity(); } @@ -147,7 +147,7 @@ public SelectEntityReferenceWithExtensionIT() { } @Override - public SearchQueryWhereStep select(SearchQuerySelectStep step) { + public SearchQueryWhereStep select(SearchQuerySelectStep step) { return step.extension( TckConfiguration.get().getBackendHelper().queryDslExtension() ) .selectEntityReference(); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryTimeoutIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryTimeoutIT.java index 75064dedc8d..6793b9804d7 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryTimeoutIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/query/SearchQueryTimeoutIT.java @@ -200,12 +200,12 @@ void scroll_truncateAfter_fastQuery_largeTimeout() { } } - private SearchQueryOptionsStep startSlowQuery() { + private SearchQueryOptionsStep startSlowQuery() { return index.createScope().query() .where( f -> TckConfiguration.get().getBackendHelper().createSlowPredicate( f ) ); } - private SearchQueryOptionsStep startFastQuery() { + private SearchQueryOptionsStep startFastQuery() { return index.createScope().query() .where( f -> f.match().field( EMPTY_FIELD_NAME ).matching( NON_MATCHING_INTEGER ) ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java index 1875eb8a4c9..4b9113b25da 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/reference/FieldReferenceIT.java @@ -12,6 +12,7 @@ import java.time.LocalDate; import java.util.List; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.backend.document.DocumentElement; import org.hibernate.search.engine.backend.document.IndexFieldReference; import org.hibernate.search.engine.backend.document.IndexObjectFieldReference; @@ -24,9 +25,13 @@ import org.hibernate.search.engine.backend.types.converter.ToDocumentValueConverter; import org.hibernate.search.engine.backend.types.converter.runtime.FromDocumentValueConvertContext; import org.hibernate.search.engine.backend.types.converter.runtime.ToDocumentValueConvertContext; +import org.hibernate.search.engine.search.common.ValueConvert; import org.hibernate.search.engine.search.reference.NestedObjectFieldReference; import org.hibernate.search.engine.search.reference.ValueFieldReference; import org.hibernate.search.engine.search.reference.impl.ObjectFieldReferenceImpl; +import org.hibernate.search.engine.search.reference.traits.predicate.KnnPredicateFieldReference; +import org.hibernate.search.engine.search.reference.traits.predicate.MatchPredicateFieldReference; +import org.hibernate.search.engine.search.reference.traits.projection.FieldProjectionFieldReference; import org.hibernate.search.integrationtest.backend.tck.search.predicate.AbstractPredicateDataSet; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.extension.SearchSetupHelper; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; @@ -163,14 +168,14 @@ private enum SomeEnum { } public static class IndexedEntity_ { - public static ValueFieldReference primitiveInteger; - public static ValueFieldReference wrapperDouble; - public static ValueFieldReference string; - public static ValueFieldReference stringProjectedAsBytes; - public static ValueFieldReference localDate; - public static ValueFieldReference vector; - - public static ValueFieldReference stringList; + public static ValueFieldReference1 primitiveInteger; + public static ValueFieldReference1 wrapperDouble; + public static ValueFieldReference1 string; + public static ValueFieldReference1 stringProjectedAsBytes; + public static ValueFieldReference1 localDate; + public static ValueFieldReference2 vector; + + public static ValueFieldReference1 stringList; public static NestedEmbeddedEntity_ nestedEmbeddedEntity; public static EmbeddedEntityList_ embeddedEntityList; @@ -179,14 +184,19 @@ public static class IndexedEntity_ { public static Parent_ parent; static { - primitiveInteger = ValueFieldReference.of( "primitiveInteger", Integer.class, Integer.class, Integer.class ); - wrapperDouble = ValueFieldReference.of( "wrapperDouble", Double.class, Double.class, Double.class ); - string = ValueFieldReference.of( "string", String.class, String.class, String.class ); + primitiveInteger = ValueFieldReference1.of( "primitiveInteger", DocumentReference.class, Integer.class, + Integer.class, Integer.class ); + wrapperDouble = ValueFieldReference1.of( "wrapperDouble", DocumentReference.class, Double.class, Double.class, + Double.class ); + string = ValueFieldReference1.of( "string", DocumentReference.class, String.class, String.class, String.class ); stringProjectedAsBytes = - ValueFieldReference.of( "stringProjectedAsBytes", String.class, String.class, byte[].class ); - localDate = ValueFieldReference.of( "localDate", LocalDate.class, LocalDate.class, LocalDate.class ); - vector = ValueFieldReference.of( "vector", float[].class, float[].class, float[].class ); - stringList = ValueFieldReference.of( "stringList", String.class, String.class, String.class ); + ValueFieldReference1.of( "stringProjectedAsBytes", DocumentReference.class, String.class, String.class, + byte[].class ); + localDate = ValueFieldReference1.of( "localDate", DocumentReference.class, LocalDate.class, LocalDate.class, + LocalDate.class ); + vector = ValueFieldReference2.of( "vector", DocumentReference.class, float[].class, float[].class, float[].class ); + stringList = + ValueFieldReference1.of( "stringList", DocumentReference.class, String.class, String.class, String.class ); flattenedEmbeddedEntity = new FlattenedEmbeddedEntity_( "flattenedEmbeddedEntity" ); nestedEmbeddedEntity = new NestedEmbeddedEntity_( "nestedEmbeddedEntity" ); @@ -196,14 +206,16 @@ public static class IndexedEntity_ { public static class NestedEmbeddedEntity_ extends ObjectFieldReferenceImpl implements NestedObjectFieldReference { - public ValueFieldReference string; - public ValueFieldReference someEnum; + public ValueFieldReference1 string; + public ValueFieldReference1 someEnum; private NestedEmbeddedEntity_(String absolutePath) { super( absolutePath ); - this.string = ValueFieldReference.of( absolutePath + ".string", String.class, String.class, String.class ); + this.string = ValueFieldReference1.of( absolutePath + ".string", DocumentReference.class, String.class, + String.class, String.class ); this.someEnum = - ValueFieldReference.of( absolutePath + ".someEnum", SomeEnum.class, String.class, SomeEnum.class ); + ValueFieldReference1.of( absolutePath + ".someEnum", DocumentReference.class, SomeEnum.class, + String.class, SomeEnum.class ); } } @@ -384,7 +396,10 @@ IndexBindingFields indexedEntity(IndexSchemaElement element) { fields.localDate = element.field( "localDate", f -> f.asLocalDate().projectable( Projectable.YES ) ).toReference(); fields.stringList = element.field( "stringList", f -> f.asString().projectable( Projectable.YES ) ).multiValued().toReference(); - fields.vector = element.field( "vector", f -> f.asFloatVector().dimension( 3 ).vectorSimilarity( VectorSimilarity.L2 ).projectable( Projectable.YES ) ) + fields.vector = element + .field( "vector", + f -> f.asFloatVector().dimension( 3 ).vectorSimilarity( VectorSimilarity.L2 ) + .projectable( Projectable.YES ) ) .toReference(); @@ -433,7 +448,10 @@ IndexBindingFields indexedEntity(IndexSchemaElement element) { IndexBindingFields indexedEntityWithExcludes(IndexSchemaElement element) { IndexBindingFields fields = new IndexBindingFields(); fields.string = element.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference(); - fields.vector = element.field( "vector", f -> f.asFloatVector().dimension( 3 ).vectorSimilarity( VectorSimilarity.L2 ).projectable( Projectable.YES ) ) + fields.vector = element + .field( "vector", + f -> f.asFloatVector().dimension( 3 ).vectorSimilarity( VectorSimilarity.L2 ) + .projectable( Projectable.YES ) ) .toReference(); return fields; } @@ -522,4 +540,163 @@ public SomeEnum fromDocumentValue(String value, FromDocumentValueConvertContext return value == null ? null : SomeEnum.valueOf( value ); } } + + public static class ValueFieldReference1 extends TypedFieldReference1 { + + public static ValueFieldReference1 of( + String path, + Class documentReferenceClass, + Class t, + Class v, + Class

p) { + return new ValueFieldReference1<>( path, documentReferenceClass, t, v, p ); + } + + private final TypedFieldReference1 noConverter; + private final TypedFieldReference1 string; + + public ValueFieldReference1(String absolutePath, Class containing, Class inputType, Class indexType, + Class

projectionType) { + super( absolutePath, ValueConvert.YES, containing, inputType, projectionType ); + this.noConverter = new TypedFieldReference1<>( absolutePath, ValueConvert.NO, containing, indexType, indexType ); + this.string = + new TypedFieldReference1<>( absolutePath, ValueConvert.PARSE, containing, String.class, String.class ); + } + + public TypedFieldReference1 noConverter() { + return noConverter; + } + + + public TypedFieldReference1 asString() { + return string; + } + + } + + public static class TypedFieldReference1 + implements FieldProjectionFieldReference, + MatchPredicateFieldReference { + + private final String absolutePath; + private final ValueConvert valueConvert; + private final Class containing; + private final Class input; + private final Class

projection; + + public TypedFieldReference1(String absolutePath, ValueConvert valueConvert, Class containing, Class input, + Class

projection) { + this.absolutePath = absolutePath; + this.valueConvert = valueConvert; + this.containing = containing; + this.input = input; + this.projection = projection; + } + + @Override + public String absolutePath() { + return absolutePath; + } + + @Override + public Class predicateType() { + return input; + } + + @Override + public ValueConvert valueConvert() { + return valueConvert; + } + + @Override + public Class

projectionType() { + return projection; + } + + @Override + public Class containing() { + return containing; + } + } + + + + public static class ValueFieldReference2 extends TypedFieldReference2 { + + public static ValueFieldReference2 of( + String path, + Class documentReferenceClass, + Class t, + Class v, + Class

p) { + return new ValueFieldReference2<>( path, documentReferenceClass, t, v, p ); + } + + private final TypedFieldReference2 noConverter; + private final TypedFieldReference2 string; + + public ValueFieldReference2(String absolutePath, Class containing, Class inputType, Class indexType, + Class

projectionType) { + super( absolutePath, ValueConvert.YES, containing, inputType, projectionType ); + this.noConverter = new TypedFieldReference2<>( absolutePath, ValueConvert.NO, containing, indexType, indexType ); + this.string = + new TypedFieldReference2<>( absolutePath, ValueConvert.PARSE, containing, String.class, String.class ); + } + + public TypedFieldReference2 noConverter() { + return noConverter; + } + + + public TypedFieldReference2 asString() { + return string; + } + + } + + public static class TypedFieldReference2 + implements FieldProjectionFieldReference, + KnnPredicateFieldReference { + + private final String absolutePath; + private final ValueConvert valueConvert; + private final Class containing; + private final Class input; + private final Class

projection; + + public TypedFieldReference2(String absolutePath, ValueConvert valueConvert, Class containing, Class input, + Class

projection) { + this.absolutePath = absolutePath; + this.valueConvert = valueConvert; + this.containing = containing; + this.input = input; + this.projection = projection; + } + + @Override + public String absolutePath() { + return absolutePath; + } + + @Override + public Class predicateType() { + return input; + } + + @Override + public ValueConvert valueConvert() { + return valueConvert; + } + + @Override + public Class

projectionType() { + return projection; + } + + @Override + public Class containing() { + return containing; + } + } + } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/CompositeSortIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/CompositeSortIT.java index fb508ec2deb..4588fd0cce6 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/CompositeSortIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/CompositeSortIT.java @@ -272,12 +272,12 @@ void then_flattened_nested_filterByPredicate() { } private SearchQuery simpleQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return simpleQuery( index.createScope(), sortContributor ); } private SearchQuery simpleQuery(StubMappingScope scope, - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return scope.query() .where( f -> f.matchAll() ) .sort( sortContributor ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortDynamicFieldIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortDynamicFieldIT.java index e72ddaafb0a..a8361ceb164 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortDynamicFieldIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortDynamicFieldIT.java @@ -125,17 +125,17 @@ void neverPopulatedParameter() { } private SearchQuery matchNonEmptyQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return matchNonEmptyQuery( sortContributor, mainIndex.createScope(), null, null ); } private SearchQuery matchNonEmptyQuery( - Function sortContributor, String parameter, Object value) { + Function, ? extends SortFinalStep> sortContributor, String parameter, Object value) { return matchNonEmptyQuery( sortContributor, mainIndex.createScope(), parameter, value ); } private SearchQuery matchNonEmptyQuery( - Function sortContributor, StubMappingScope scope, + Function, ? extends SortFinalStep> sortContributor, StubMappingScope scope, String parameter, Object value) { if ( parameter == null ) { return scope.query() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortFilteringSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortFilteringSpecificsIT.java index 9bb0677201d..80c3982454e 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortFilteringSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortFilteringSpecificsIT.java @@ -98,12 +98,12 @@ void invalidNestedPath_sibling() { } private SearchQuery matchAllQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return matchAllQuery( sortContributor, index.createScope() ); } private SearchQuery matchAllQuery( - Function sortContributor, StubMappingScope scope) { + Function, ? extends SortFinalStep> sortContributor, StubMappingScope scope) { return scope.query() .where( f -> f.matchAll() ) .sort( sortContributor ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortSpecificsIT.java index f101eac26d2..8ca5704c968 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortSpecificsIT.java @@ -480,11 +480,11 @@ void factoryWithRoot(TestedFieldStructure fieldStructure, SortMode sortMode, assertThatQuery( index.query() .where( f -> f.matchAll() ) .routing( dataSet.routingKey ) - .sort( ( (Function>) f -> f.withRoot( parentObjectBinding.absolutePath ) + .sort( ( (Function, + DistanceSortOptionsStep>) f -> f.withRoot( parentObjectBinding.absolutePath ) .distance( parentObjectBinding.getRelativeFieldName( fieldStructure, fieldType ), CENTER_POINT ) ) - .andThen( (DistanceSortOptionsStep optionsStep1) -> applySortMode( optionsStep1, sortMode + .andThen( (DistanceSortOptionsStep optionsStep1) -> applySortMode( optionsStep1, sortMode ) ) // Don't call this.applyFilter: we need to use the relative name of the discriminator field. .andThen( optionsStep -> { @@ -552,7 +552,7 @@ private boolean isSum(SortMode sortMode) { } private SearchQuery simpleQuery(DataSet dataSet, - Function> sortContributor, + Function, ? extends DistanceSortOptionsStep> sortContributor, SortMode sortMode, TestedFieldStructure fieldStructure) { return index.query() .where( f -> f.matchAll() ) @@ -562,7 +562,7 @@ private SearchQuery simpleQuery(DataSet dataSet, .toQuery(); } - private DistanceSortOptionsStep applySortMode(DistanceSortOptionsStep optionsStep, SortMode sortMode) { + private DistanceSortOptionsStep applySortMode(DistanceSortOptionsStep optionsStep, SortMode sortMode) { if ( sortMode != null ) { return optionsStep.mode( sortMode ); } @@ -571,7 +571,7 @@ private SearchQuery simpleQuery(DataSet dataSet, } } - private DistanceSortOptionsStep applyFilter(DistanceSortOptionsStep optionsStep, + private DistanceSortOptionsStep applyFilter(DistanceSortOptionsStep optionsStep, TestedFieldStructure fieldStructure) { if ( fieldStructure.isInNested() ) { return optionsStep.filter( f -> f.match() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortDynamicFieldIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortDynamicFieldIT.java index e39fdb7d99b..e44db54ffa7 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortDynamicFieldIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortDynamicFieldIT.java @@ -116,12 +116,12 @@ void neverPopulated(FieldTypeDescriptor fieldTypeDescriptor) { } private SearchQuery matchNonEmptyQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return matchNonEmptyQuery( sortContributor, mainIndex.createScope() ); } private SearchQuery matchNonEmptyQuery( - Function sortContributor, StubMappingScope scope) { + Function, ? extends SortFinalStep> sortContributor, StubMappingScope scope) { return scope.query() .where( f -> f.matchAll().except( f.id().matching( EMPTY ) ) ) .sort( sortContributor ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortFilteringSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortFilteringSpecificsIT.java index de82ca9f653..836010b1017 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortFilteringSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortFilteringSpecificsIT.java @@ -122,12 +122,12 @@ void invalidNestedPath_sibling(FieldTypeDescriptor fieldTypeDescriptor) { } private SearchQuery matchAllQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return matchAllQuery( sortContributor, index.createScope() ); } private SearchQuery matchAllQuery( - Function sortContributor, StubMappingScope scope) { + Function, ? extends SortFinalStep> sortContributor, StubMappingScope scope) { return scope.query() .where( f -> f.matchAll() ) .sort( sortContributor ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortSpecificsIT.java index a0c7561f4f3..55e8f08cfe9 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortSpecificsIT.java @@ -495,10 +495,10 @@ void factoryWithRoot(TestedFieldStructure fieldStructure, dataSet.emptyDoc1Id, dataSet.emptyDoc2Id, dataSet.emptyDoc3Id, dataSet.emptyDoc4Id ) ) ) ) .routing( dataSet.routingKey ) - .sort( ( (Function>) f -> f.withRoot( parentObjectBinding.absolutePath ) + .sort( ( (Function, + FieldSortOptionsStep>) f -> f.withRoot( parentObjectBinding.absolutePath ) .field( parentObjectBinding.getRelativeFieldName( fieldStructure, fieldType ) ) ) - .andThen( (FieldSortOptionsStep optionsStep1) -> applySortMode( optionsStep1, sortMode ) ) + .andThen( (FieldSortOptionsStep optionsStep1) -> applySortMode( optionsStep1, sortMode ) ) // Don't call this.applyFilter: we need to use the relative name of the discriminator field. .andThen( optionsStep -> { if ( fieldStructure.isInNested() ) { @@ -589,13 +589,13 @@ void missingValue_multipleOptionsSameTime(TestedFieldStructure fieldStructure, } private SearchQuery matchNonEmptyQuery(DataSet dataSet, - Function> sortContributor, + Function, ? extends FieldSortOptionsStep> sortContributor, SortMode sortMode, TestedFieldStructure fieldStructure) { return matchNonEmptyQuery( dataSet, sortContributor, index.createScope(), sortMode, fieldStructure ); } private SearchQuery matchNonEmptyQuery(DataSet dataSet, - Function> sortContributor, StubMappingScope scope, + Function, ? extends FieldSortOptionsStep> sortContributor, StubMappingScope scope, SortMode sortMode, TestedFieldStructure fieldStructure) { return query( dataSet, @@ -611,13 +611,13 @@ private SearchQuery matchNonEmptyQuery(DataSet dataSet, } private SearchQuery matchNonEmptyAndEmpty1Query(DataSet dataSet, - Function> sortContributor, + Function, ? extends FieldSortOptionsStep> sortContributor, SortMode sortMode, TestedFieldStructure fieldStructure) { return matchNonEmptyAndEmpty1Query( dataSet, sortContributor, index.createScope(), sortMode, fieldStructure ); } private SearchQuery matchNonEmptyAndEmpty1Query(DataSet dataSet, - Function> sortContributor, StubMappingScope scope, + Function, ? extends FieldSortOptionsStep> sortContributor, StubMappingScope scope, SortMode sortMode, TestedFieldStructure fieldStructure) { return query( dataSet, @@ -631,20 +631,20 @@ private SearchQuery matchNonEmptyAndEmpty1Query(DataSet da } private SearchQuery matchAllQuery(DataSet dataSet, - Function> sortContributor, + Function, ? extends FieldSortOptionsStep> sortContributor, SortMode sortMode, TestedFieldStructure fieldStructure) { return matchAllQuery( dataSet, sortContributor, index.createScope(), sortMode, fieldStructure ); } private SearchQuery matchAllQuery(DataSet dataSet, - Function> sortContributor, StubMappingScope scope, + Function, ? extends FieldSortOptionsStep> sortContributor, StubMappingScope scope, SortMode sortMode, TestedFieldStructure fieldStructure) { return query( dataSet, f -> f.matchAll(), sortContributor, scope, sortMode, fieldStructure ); } private SearchQuery query(DataSet dataSet, - Function predicateContributor, - Function> sortContributor, + Function, ? extends PredicateFinalStep> predicateContributor, + Function, ? extends FieldSortOptionsStep> sortContributor, StubMappingScope scope, SortMode sortMode, TestedFieldStructure fieldStructure) { return scope.query() .where( predicateContributor ) @@ -654,7 +654,7 @@ private SearchQuery query(DataSet dataSet, .toQuery(); } - private FieldSortOptionsStep applySortMode(FieldSortOptionsStep optionsStep, SortMode sortMode) { + private FieldSortOptionsStep applySortMode(FieldSortOptionsStep optionsStep, SortMode sortMode) { if ( sortMode != null ) { return optionsStep.mode( sortMode ); } @@ -663,7 +663,7 @@ private SearchQuery query(DataSet dataSet, } } - private FieldSortOptionsStep applyFilter(FieldSortOptionsStep optionsStep, + private FieldSortOptionsStep applyFilter(FieldSortOptionsStep optionsStep, TestedFieldStructure fieldStructure) { if ( fieldStructure.isInNested() ) { return optionsStep.filter( f -> f.match() diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java index 14675ec1751..3f3bed7d6e8 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java @@ -465,12 +465,12 @@ void multiIndex_withIncompatibleIndex_dslConverterDisabled(StandardFieldTypeDesc } private SearchQuery matchAllQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { return matchAllQuery( sortContributor, mainIndex.createScope() ); } private SearchQuery matchAllQuery( - Function sortContributor, StubMappingScope scope) { + Function, ? extends SortFinalStep> sortContributor, StubMappingScope scope) { return scope.query() .where( f -> f.matchAll() ) .sort( sortContributor ) @@ -478,7 +478,7 @@ private SearchQuery matchAllQuery( } private SearchQuery matchNonEmptyQuery( - Function sortContributor, StubMappingScope scope) { + Function, ? extends SortFinalStep> sortContributor, StubMappingScope scope) { return scope.query() .where( f -> f.matchAll().except( f.id().matching( EMPTY ) ) ) .sort( sortContributor ) diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/SearchSortIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/SearchSortIT.java index 62eb974db0e..9875e9e096d 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/SearchSortIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/SearchSortIT.java @@ -83,7 +83,7 @@ void setup() { } private SearchQuery simpleQuery( - Function sortContributor) { + Function, ? extends SortFinalStep> sortContributor) { StubMappingScope scope = mainIndex.createScope(); return scope.query() .where( f -> f.matchAll() ) @@ -558,28 +558,28 @@ private static class ObjectFieldBinding { private static class SupportedExtension implements SearchSortFactoryExtension { @Override - public Optional extendOptional(SearchSortFactory original) { + public Optional extendOptional(SearchSortFactory original) { assertThat( original ).isNotNull(); - return Optional.of( new MyExtendedFactory( original ) ); + return Optional.of( new MyExtendedFactory( (SearchSortFactory) original ) ); } } private static class UnSupportedExtension implements SearchSortFactoryExtension { @Override - public Optional extendOptional(SearchSortFactory original) { + public Optional extendOptional(SearchSortFactory original) { assertThat( original ).isNotNull(); return Optional.empty(); } } private static class MyExtendedFactory { - private final SearchSortFactory delegate; + private final SearchSortFactory delegate; - MyExtendedFactory(SearchSortFactory delegate) { + MyExtendedFactory(SearchSortFactory delegate) { this.delegate = delegate; } - public FieldSortOptionsStep extendedSort(String absoluteFieldPath) { + public FieldSortOptionsStep> extendedSort(String absoluteFieldPath) { return delegate.field( absoluteFieldPath ); } } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java index 4fb8f44fa3d..e57d678ab1e 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java @@ -16,6 +16,7 @@ import java.util.Map; import java.util.function.Function; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.aggregation.dsl.AggregationFinalStep; import org.hibernate.search.engine.search.aggregation.dsl.RangeAggregationOptionsStep; import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; @@ -133,10 +134,10 @@ private AggregationScenario, Long>> doCreate(Map, Long TypeAssertionHelper helper) { return new AggregationScenario, Long>>() { @Override - public AggregationFinalStep, Long>> setup(SearchAggregationFactory factory, + public AggregationFinalStep, Long>> setup(SearchAggregationFactory factory, String fieldPath, - Function filterOrNull) { - RangeAggregationOptionsStep, Long>> optionsStep = + Function, ? extends PredicateFinalStep> filterOrNull) { + RangeAggregationOptionsStep, Long>> optionsStep = factory.range().field( fieldPath, helper.getJavaClass() ) .range( helper.create( ascendingValues.get( 0 ) ), helper.create( ascendingValues.get( 2 ) ) ) @@ -153,7 +154,7 @@ public AggregationFinalStep, Long>> setup(SearchAggregationFactory } @Override - public AggregationFinalStep, Long>> setupWithConverterSetting(SearchAggregationFactory factory, + public AggregationFinalStep, Long>> setupWithConverterSetting(SearchAggregationFactory factory, String fieldPath, ValueConvert convert) { return factory.range().field( fieldPath, helper.getJavaClass(), convert ) .range( helper.create( ascendingValues.get( 0 ) ), @@ -194,7 +195,7 @@ public String aggregationName() { } @Override - public void trySetup(SearchAggregationFactory factory, String fieldPath) { + public void trySetup(SearchAggregationFactory factory, String fieldPath) { factory.range().field( fieldPath, typeDescriptor.getJavaType() ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/TermsAggregationDescriptor.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/TermsAggregationDescriptor.java index 7b5e7586b4f..b623d3bf6d3 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/TermsAggregationDescriptor.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/TermsAggregationDescriptor.java @@ -17,6 +17,7 @@ import java.util.Map; import java.util.function.Function; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.aggregation.dsl.AggregationFinalStep; import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; import org.hibernate.search.engine.search.aggregation.dsl.TermsAggregationOptionsStep; @@ -140,9 +141,9 @@ private AggregationScenario> doCreate(Map expectedResu TypeAssertionHelper helper) { return new AggregationScenario>() { @Override - public AggregationFinalStep> setup(SearchAggregationFactory factory, String fieldPath, - Function filterOrNull) { - TermsAggregationOptionsStep> optionsStep = + public AggregationFinalStep> setup(SearchAggregationFactory factory, String fieldPath, + Function, ? extends PredicateFinalStep> filterOrNull) { + TermsAggregationOptionsStep> optionsStep = factory.terms().field( fieldPath, helper.getJavaClass() ); if ( filterOrNull == null ) { return optionsStep; @@ -153,7 +154,7 @@ public AggregationFinalStep> setup(SearchAggregationFactory factory } @Override - public AggregationFinalStep> setupWithConverterSetting(SearchAggregationFactory factory, + public AggregationFinalStep> setupWithConverterSetting(SearchAggregationFactory factory, String fieldPath, ValueConvert convert) { return factory.terms().field( fieldPath, helper.getJavaClass(), convert ); } @@ -188,7 +189,7 @@ public String aggregationName() { } @Override - public void trySetup(SearchAggregationFactory factory, String fieldPath) { + public void trySetup(SearchAggregationFactory factory, String fieldPath) { factory.terms().field( fieldPath, typeDescriptor.getJavaType() ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/AggregationScenario.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/AggregationScenario.java index be00bacdca9..7e24a4f5131 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/AggregationScenario.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/AggregationScenario.java @@ -8,6 +8,7 @@ import java.util.function.Function; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.aggregation.dsl.AggregationFinalStep; import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; import org.hibernate.search.engine.search.common.ValueConvert; @@ -16,14 +17,14 @@ public interface AggregationScenario { - default AggregationFinalStep setup(SearchAggregationFactory factory, String fieldPath) { + default AggregationFinalStep setup(SearchAggregationFactory factory, String fieldPath) { return setup( factory, fieldPath, null ); } - AggregationFinalStep setup(SearchAggregationFactory factory, String fieldPath, - Function filterOrNull); + AggregationFinalStep setup(SearchAggregationFactory factory, String fieldPath, + Function, ? extends PredicateFinalStep> filterOrNull); - AggregationFinalStep setupWithConverterSetting(SearchAggregationFactory factory, String fieldPath, + AggregationFinalStep setupWithConverterSetting(SearchAggregationFactory factory, String fieldPath, ValueConvert convert); void check(A aggregationResult); diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/UnsupportedSingleFieldAggregationExpectations.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/UnsupportedSingleFieldAggregationExpectations.java index 9a4c33a479d..469d3f06686 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/UnsupportedSingleFieldAggregationExpectations.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/expectations/UnsupportedSingleFieldAggregationExpectations.java @@ -6,12 +6,13 @@ */ package org.hibernate.search.integrationtest.backend.tck.testsupport.operations.expectations; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; public interface UnsupportedSingleFieldAggregationExpectations { String aggregationName(); - void trySetup(SearchAggregationFactory factory, String fieldPath); + void trySetup(SearchAggregationFactory factory, String fieldPath); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendHelper.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendHelper.java index 8473100f329..4bea3a4fd1b 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendHelper.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendHelper.java @@ -6,6 +6,7 @@ */ package org.hibernate.search.integrationtest.backend.tck.testsupport.util; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.query.dsl.SearchQueryDslExtension; @@ -46,7 +47,7 @@ public interface TckBackendHelper { * @param f A {@link SearchPredicateFactory} * @return A slow predicate, i.e. a predicate whose execution will take more than 10 milliseconds per document. */ - PredicateFinalStep createSlowPredicate(SearchPredicateFactory f); + PredicateFinalStep createSlowPredicate(SearchPredicateFactory f); SearchQueryDslExtension, R, E, LOS> queryDslExtension(); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/SearchScope.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/SearchScope.java index 4b51ba0586c..05c77fda6f3 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/SearchScope.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/SearchScope.java @@ -54,7 +54,7 @@ public interface SearchScope { * @return A predicate factory. * @see SearchPredicateFactory */ - SearchPredicateFactory predicate(); + SearchPredicateFactory predicate(); /** * Initiate the building of a search sort. @@ -71,7 +71,7 @@ public interface SearchScope { * @return A sort factory. * @see SearchSortFactory */ - SearchSortFactory sort(); + SearchSortFactory sort(); /** * Initiate the building of a search projection that will be valid for the indexes in this scope. @@ -104,7 +104,7 @@ public interface SearchScope { * @return An aggregation factory. * @see SearchAggregationFactory */ - SearchAggregationFactory aggregation(); + SearchAggregationFactory aggregation(); /** * Create a {@link SearchSchemaManager} for the indexes mapped to types in this scope, or to any of their sub-types. diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/aggregation/dsl/impl/StubSearchAggregationFactory.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/aggregation/dsl/impl/StubSearchAggregationFactory.java index 1232b927632..4317dd956ed 100644 --- a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/aggregation/dsl/impl/StubSearchAggregationFactory.java +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/aggregation/dsl/impl/StubSearchAggregationFactory.java @@ -6,6 +6,7 @@ */ package org.hibernate.search.util.impl.integrationtest.common.stub.backend.search.aggregation.dsl.impl; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.aggregation.dsl.spi.AbstractSearchAggregationFactory; import org.hibernate.search.engine.search.aggregation.dsl.spi.SearchAggregationDslContext; import org.hibernate.search.engine.search.aggregation.spi.SearchAggregationIndexScope; @@ -13,9 +14,9 @@ public class StubSearchAggregationFactory extends - AbstractSearchAggregationFactory, SearchPredicateFactory> { + AbstractSearchAggregationFactory, SearchPredicateFactory> { public StubSearchAggregationFactory( - SearchAggregationDslContext, SearchPredicateFactory> dslContext) { + SearchAggregationDslContext, SearchPredicateFactory> dslContext) { super( dslContext ); } diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/predicate/dsl/impl/StubSearchPredicateFactory.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/predicate/dsl/impl/StubSearchPredicateFactory.java index 6fa98ddedde..7bcfa39254c 100644 --- a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/predicate/dsl/impl/StubSearchPredicateFactory.java +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/predicate/dsl/impl/StubSearchPredicateFactory.java @@ -10,15 +10,15 @@ import org.hibernate.search.engine.search.predicate.dsl.spi.SearchPredicateDslContext; import org.hibernate.search.engine.search.predicate.spi.SearchPredicateIndexScope; -public class StubSearchPredicateFactory - extends AbstractSearchPredicateFactory> { +public class StubSearchPredicateFactory + extends AbstractSearchPredicateFactory, SearchPredicateIndexScope> { public StubSearchPredicateFactory( SearchPredicateDslContext> dslContext) { super( dslContext ); } @Override - public StubSearchPredicateFactory withRoot(String objectFieldPath) { - return new StubSearchPredicateFactory( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ) ) ); + public StubSearchPredicateFactory withRoot(String objectFieldPath) { + return new StubSearchPredicateFactory<>( dslContext.rescope( dslContext.scope().withRoot( objectFieldPath ) ) ); } } diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/sort/dsl/impl/StubSearchSortFactory.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/sort/dsl/impl/StubSearchSortFactory.java index 7700f376f3a..90cd3d2e601 100644 --- a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/sort/dsl/impl/StubSearchSortFactory.java +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/stub/backend/search/sort/dsl/impl/StubSearchSortFactory.java @@ -6,14 +6,15 @@ */ package org.hibernate.search.util.impl.integrationtest.common.stub.backend.search.sort.dsl.impl; +import org.hibernate.search.engine.backend.common.DocumentReference; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.sort.dsl.spi.AbstractSearchSortFactory; import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext; import org.hibernate.search.engine.search.sort.spi.SearchSortIndexScope; public class StubSearchSortFactory - extends AbstractSearchSortFactory, SearchPredicateFactory> { - public StubSearchSortFactory(SearchSortDslContext, SearchPredicateFactory> dslContext) { + extends AbstractSearchSortFactory, SearchPredicateFactory> { + public StubSearchSortFactory(SearchSortDslContext, SearchPredicateFactory> dslContext) { super( dslContext ); } diff --git a/util/internal/integrationtest/mapper/stub/src/main/java/org/hibernate/search/util/impl/integrationtest/mapper/stub/GenericStubMappingScope.java b/util/internal/integrationtest/mapper/stub/src/main/java/org/hibernate/search/util/impl/integrationtest/mapper/stub/GenericStubMappingScope.java index c4e3453a6e3..a21ac664e88 100644 --- a/util/internal/integrationtest/mapper/stub/src/main/java/org/hibernate/search/util/impl/integrationtest/mapper/stub/GenericStubMappingScope.java +++ b/util/internal/integrationtest/mapper/stub/src/main/java/org/hibernate/search/util/impl/integrationtest/mapper/stub/GenericStubMappingScope.java @@ -62,11 +62,11 @@ public SearchLoadingContext build() { return delegate.search( sessionContext, loadingContextBuilder ); } - public SearchPredicateFactory predicate() { + public SearchPredicateFactory predicate() { return delegate.predicate(); } - public SearchSortFactory sort() { + public SearchSortFactory sort() { return delegate.sort(); } @@ -74,7 +74,7 @@ public SearchProjectionFactory projection() { return delegate.projection(); } - public SearchAggregationFactory aggregation() { + public SearchAggregationFactory aggregation() { return delegate.aggregation(); } From bdedc9b770a7014b1b703055e7de43ecc74fa3e7 Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Tue, 7 May 2024 10:59:13 +0200 Subject: [PATCH 3/3] HSEARCH-3319 WIP: add a test --- .../search/predicate/FieldReferenceIT.java | 254 ++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 documentation/src/test/java/org/hibernate/search/documentation/search/predicate/FieldReferenceIT.java diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/FieldReferenceIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/FieldReferenceIT.java new file mode 100644 index 00000000000..6d5eebd853a --- /dev/null +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/FieldReferenceIT.java @@ -0,0 +1,254 @@ +/* + * 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.documentation.search.predicate; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmUtils.with; + +import java.util.List; +import java.util.function.Consumer; + +import jakarta.persistence.Entity; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Id; + +import org.hibernate.search.documentation.testsupport.BackendConfigurations; +import org.hibernate.search.documentation.testsupport.DocumentationSetupHelper; +import org.hibernate.search.engine.backend.types.Projectable; +import org.hibernate.search.engine.search.common.ValueConvert; +import org.hibernate.search.engine.search.predicate.SearchPredicate; +import org.hibernate.search.engine.search.reference.traits.predicate.MatchPredicateFieldReference; +import org.hibernate.search.engine.search.reference.traits.projection.FieldProjectionFieldReference; +import org.hibernate.search.mapper.orm.Search; +import org.hibernate.search.mapper.orm.scope.SearchScope; +import org.hibernate.search.mapper.orm.session.SearchSession; +import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField; +import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +class FieldReferenceIT { + + @RegisterExtension + public DocumentationSetupHelper setupHelper = DocumentationSetupHelper.withSingleBackend( BackendConfigurations.simple() ); + + private EntityManagerFactory entityManagerFactory; + + @BeforeEach + void setup() { + entityManagerFactory = setupHelper.start().setup( EntityA.class, EntityB.class, EntityC.class ); + initData(); + } + + @Test + void smoke() { + withinSearchSession( searchSession -> { + assertThat( + searchSession.search( EntityA.class ) + .select( f -> f.field( EntityA_.stringA ) ) + .where( f -> f.match().field( EntityA_.stringA ).matching( "a" ) ) + .fetchHits( 20 ) + ).containsOnly( "a" ); + + assertThat( + searchSession.search( EntityA.class ) + .select( f -> f.field( EntityC_.stringA ) ) + .where( f -> f.match().field( EntityC_.stringC ).matching( "c" ) ) + .fetchHits( 20 ) + ).containsOnly( "c" ); + + SearchScope scope = searchSession.scope( List.of( EntityB.class, EntityC.class ) ); + SearchPredicate searchPredicate = scope.predicate().match().field( EntityB_.stringA ).matching( "b" ).toPredicate(); + SearchPredicate searchPredicate2 = + scope.predicate().match().field( EntityC_.stringC ).matching( "c" ).toPredicate(); + + assertThat( + searchSession.search( scope ) + .select( f -> f.field( EntityC_.stringA ) ) + .where( searchPredicate ) + .fetchHits( 20 ) + ).containsOnly( "b" ); + + assertThat( + searchSession.search( scope ) + .select( f -> f.field( EntityC_.stringA ) ) + .where( searchPredicate2 ) + .fetchHits( 20 ) + ).containsOnly( "c" ); + + } ); + } + + private void initData() { + with( entityManagerFactory ).runInTransaction( entityManager -> { + EntityA a = new EntityA(); + a.id = 1L; + a.stringA = "a"; + + EntityB b = new EntityB(); + b.id = 10L; + b.stringA = "b"; + b.stringB = "b"; + + EntityC c = new EntityC(); + c.id = 100L; + c.stringA = "c"; + c.stringB = "c"; + c.stringC = "c"; + + entityManager.persist( a ); + entityManager.persist( b ); + entityManager.persist( c ); + } ); + } + + @Indexed + @Entity + public static class EntityA { + @Id + Long id; + + @FullTextField(projectable = Projectable.YES) + String stringA; + + } + + @Entity + public static class EntityB extends EntityA { + + @FullTextField(projectable = Projectable.YES) + String stringB; + + } + + @Entity + public static class EntityC extends EntityB { + + @FullTextField(projectable = Projectable.YES) + String stringC; + + } + + + public static class EntityA_ { + public static ValueFieldReference1 stringA; + + static { + stringA = ValueFieldReference1.of( "stringA", EntityA.class, String.class, String.class, String.class ); + } + } + + public static class EntityB_ { + public static ValueFieldReference1 stringA; + public static ValueFieldReference1 stringB; + + static { + stringA = ValueFieldReference1.of( "stringA", EntityB.class, String.class, String.class, String.class ); + stringB = ValueFieldReference1.of( "stringB", EntityB.class, String.class, String.class, String.class ); + } + } + + public static class EntityC_ { + public static ValueFieldReference1 stringA; + public static ValueFieldReference1 stringB; + public static ValueFieldReference1 stringC; + + static { + stringA = ValueFieldReference1.of( "stringA", EntityC.class, String.class, String.class, String.class ); + stringB = ValueFieldReference1.of( "stringB", EntityC.class, String.class, String.class, String.class ); + stringC = ValueFieldReference1.of( "stringC", EntityC.class, String.class, String.class, String.class ); + } + } + + + public static class ValueFieldReference1 extends TypedFieldReference1 { + + public static ValueFieldReference1 of( + String path, + Class documentReferenceClass, + Class t, + Class v, + Class

p) { + return new ValueFieldReference1<>( path, documentReferenceClass, t, v, p ); + } + + private final TypedFieldReference1 noConverter; + private final TypedFieldReference1 string; + + public ValueFieldReference1(String absolutePath, Class containing, Class inputType, Class indexType, + Class

projectionType) { + super( absolutePath, ValueConvert.YES, containing, inputType, projectionType ); + this.noConverter = new TypedFieldReference1<>( absolutePath, ValueConvert.NO, containing, indexType, indexType ); + this.string = + new TypedFieldReference1<>( absolutePath, ValueConvert.PARSE, containing, String.class, String.class ); + } + + public TypedFieldReference1 noConverter() { + return noConverter; + } + + + public TypedFieldReference1 asString() { + return string; + } + + } + + public static class TypedFieldReference1 + implements FieldProjectionFieldReference, + MatchPredicateFieldReference { + + private final String absolutePath; + private final ValueConvert valueConvert; + private final Class containing; + private final Class input; + private final Class

projection; + + public TypedFieldReference1(String absolutePath, ValueConvert valueConvert, Class containing, Class input, + Class

projection) { + this.absolutePath = absolutePath; + this.valueConvert = valueConvert; + this.containing = containing; + this.input = input; + this.projection = projection; + } + + @Override + public String absolutePath() { + return absolutePath; + } + + @Override + public Class predicateType() { + return input; + } + + @Override + public ValueConvert valueConvert() { + return valueConvert; + } + + @Override + public Class

projectionType() { + return projection; + } + + @Override + public Class containing() { + return containing; + } + } + + private void withinSearchSession(Consumer action) { + with( entityManagerFactory ).runInTransaction( entityManager -> { + SearchSession searchSession = Search.session( entityManager ); + action.accept( searchSession ); + } ); + } +}