From e34f809b264e89a5201ce1c9e756c74b8dd43885 Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Fri, 16 May 2025 17:17:43 +0200 Subject: [PATCH 1/7] HSEARCH-**** Attempt to make the migration simpler --- .../elasticsearch/ElasticsearchExtension.java | 17 +- .../impl/ElasticsearchNamedPredicate.java | 6 +- .../ElasticsearchSearchProjectionFactory.java | 4 +- .../backend/lucene/LuceneExtension.java | 16 +- .../predicate/impl/LuceneNamedPredicate.java | 6 +- .../dsl/LuceneSearchProjectionFactory.java | 4 +- .../namedpredicate/SkuIdentifierBinder.java | 4 +- .../MyFieldProjectionBinder.java | 4 +- .../multi/MyFieldProjectionBinder.java | 4 +- .../annotation/MyFieldProjectionBinder.java | 4 +- .../param/string/MyFieldProjectionBinder.java | 4 +- .../simple/MyFieldProjectionBinder.java | 4 +- .../HibernateOrmEntryPointsIT.java | 20 +- .../GettingStartedDefaultAnalysisIT.java | 2 +- .../StandalonePojoEntryPointsIT.java | 20 +- .../GettingStartedDefaultAnalysisIT.java | 2 +- .../search/aggregation/AggregationDslIT.java | 2 +- .../search/paths/FieldPathsIT.java | 4 +- .../search/predicate/FieldReferenceIT.java | 15 +- .../search/predicate/PredicateDslIT.java | 2 +- .../search/projection/ProjectionDslIT.java | 2 +- .../documentation/search/sort/SortDslIT.java | 2 +- .../IndexObjectFieldTypeDescriptor.java | 4 +- .../engine/backend/types/ObjectStructure.java | 4 +- .../scope/impl/MappedIndexScopeImpl.java | 18 +- .../mapper/scope/spi/MappedIndexScope.java | 22 +- .../dsl/AggregationFilterStep.java | 4 +- .../dsl/AvgAggregationFieldStep.java | 4 +- .../dsl/AvgAggregationOptionsStep.java | 4 +- .../dsl/CountAggregationFieldStep.java | 4 +- .../dsl/CountAggregationOptionsStep.java | 4 +- .../CountDistinctAggregationFieldStep.java | 4 +- .../CountDistinctAggregationOptionsStep.java | 4 +- .../dsl/ExtendedSearchAggregationFactory.java | 8 +- .../dsl/MaxAggregationFieldStep.java | 4 +- .../dsl/MaxAggregationOptionsStep.java | 4 +- .../dsl/MinAggregationFieldStep.java | 4 +- .../dsl/MinAggregationOptionsStep.java | 4 +- .../dsl/RangeAggregationFieldStep.java | 4 +- .../dsl/RangeAggregationOptionsStep.java | 4 +- .../dsl/RangeAggregationRangeMoreStep.java | 4 +- .../dsl/RangeAggregationRangeStep.java | 4 +- .../dsl/SearchAggregationFactory.java | 111 +--- .../SearchAggregationFactoryExtension.java | 8 +- .../dsl/SumAggregationFieldStep.java | 4 +- .../dsl/SumAggregationOptionsStep.java | 4 +- .../dsl/TermsAggregationFieldStep.java | 4 +- .../dsl/TermsAggregationOptionsStep.java | 4 +- .../dsl/TypedSearchAggregationFactory.java | 166 ++++++ .../dsl/impl/AvgAggregationFieldStepImpl.java | 4 +- .../impl/AvgAggregationOptionsStepImpl.java | 4 +- .../impl/CountAggregationFieldStepImpl.java | 4 +- .../impl/CountAggregationOptionsStepImpl.java | 4 +- ...CountDistinctAggregationFieldStepImpl.java | 4 +- ...untDistinctAggregationOptionsStepImpl.java | 4 +- .../dsl/impl/MaxAggregationFieldStepImpl.java | 4 +- .../impl/MaxAggregationOptionsStepImpl.java | 4 +- .../dsl/impl/MinAggregationFieldStepImpl.java | 4 +- .../impl/MinAggregationOptionsStepImpl.java | 4 +- .../impl/RangeAggregationFieldStepImpl.java | 4 +- .../impl/RangeAggregationRangeStepImpl.java | 4 +- .../dsl/impl/SumAggregationFieldStepImpl.java | 4 +- .../impl/SumAggregationOptionsStepImpl.java | 4 +- .../impl/TermsAggregationFieldStepImpl.java | 4 +- .../impl/TermsAggregationOptionsStepImpl.java | 4 +- .../spi/AbstractSearchAggregationFactory.java | 4 +- .../dsl/spi/SearchAggregationDslContext.java | 6 +- .../spi/SearchAggregationFactoryDelegate.java | 88 +++ .../common/NonStaticMetamodelScope.java | 14 + .../definition/PredicateDefinition.java | 4 +- .../PredicateDefinitionContext.java | 6 +- .../dsl/BooleanPredicateOptionsCollector.java | 10 +- .../dsl/ExtendedSearchPredicateFactory.java | 4 +- .../GenericBooleanPredicateClausesStep.java | 8 +- ...ericSimpleBooleanPredicateClausesStep.java | 2 +- .../dsl/KnnPredicateOptionsStep.java | 2 +- .../dsl/MatchAllPredicateOptionsStep.java | 2 +- .../dsl/NestedPredicateClausesCollector.java | 4 +- .../dsl/NestedPredicateClausesStep.java | 2 +- .../dsl/NestedPredicateFieldStep.java | 2 +- .../dsl/NestedPredicateNestStep.java | 4 +- .../dsl/NestedPredicateOptionsStep.java | 2 +- .../predicate/dsl/SearchPredicateFactory.java | 348 +---------- .../dsl/SearchPredicateFactoryExtension.java | 8 +- ...teFactoryExtensionIfSupportedMoreStep.java | 8 +- ...dicateFactoryExtensionIfSupportedStep.java | 4 +- ...impleBooleanPredicateClausesCollector.java | 10 +- .../dsl/TypedSearchPredicateFactory.java | 395 ++++++++++++ .../AbstractBooleanPredicateClausesStep.java | 14 +- ...ractSimpleBooleanPredicateClausesStep.java | 8 +- .../impl/BooleanPredicateClausesStepImpl.java | 4 +- .../dsl/impl/KnnPredicateFieldStepImpl.java | 8 +- .../MatchAllPredicateOptionsStepImpl.java | 10 +- .../impl/NamedPredicateOptionsStepImpl.java | 4 +- .../impl/NestedPredicateClausesStepImpl.java | 4 +- .../impl/NestedPredicateFieldStepImpl.java | 8 +- .../SearchPredicateFactoryExtensionStep.java | 8 +- ...SimpleBooleanPredicateClausesStepImpl.java | 8 +- .../spi/SearchPredicateFactoryDelegate.java | 214 +++++++ .../predicate/spi/NamedPredicateBuilder.java | 4 +- ...ValuesBasedPredicateDefinitionContext.java | 8 +- .../definition/ProjectionDefinition.java | 10 +- .../ProjectionDefinitionContext.java | 6 +- .../spi/CompositeProjectionDefinition.java | 6 +- .../spi/ConstantProjectionDefinition.java | 4 +- .../spi/DistanceProjectionDefinition.java | 9 +- .../spi/FieldProjectionDefinition.java | 9 +- .../spi/ObjectProjectionDefinition.java | 8 +- .../dsl/CompositeProjectionValueStep.java | 4 +- .../dsl/ExtendedSearchProjectionFactory.java | 4 +- .../dsl/SearchProjectionFactory.java | 514 +--------------- .../dsl/SearchProjectionFactoryExtension.java | 12 +- ...onFactoryExtensionIfSupportedMoreStep.java | 12 +- ...ectionFactoryExtensionIfSupportedStep.java | 8 +- .../dsl/TypedSearchProjectionFactory.java | 561 ++++++++++++++++++ .../CompositeProjectionInnerStepImpl.java | 10 +- .../impl/EntityProjectionOptionsStepImpl.java | 6 +- .../SearchProjectionFactoryExtensionStep.java | 8 +- .../spi/SearchProjectionFactoryDelegate.java | 130 ++++ .../query/dsl/SearchQueryOptionsStep.java | 18 +- .../query/dsl/SearchQuerySelectStep.java | 16 +- .../query/dsl/SearchQueryWhereStep.java | 4 +- .../impl/DefaultSearchQueryOptionsStep.java | 24 +- .../impl/DefaultSearchQuerySelectStep.java | 14 +- ...stractDelegatingSearchQuerySelectStep.java | 14 +- ...bstractExtendedSearchQueryOptionsStep.java | 12 +- .../spi/AbstractSearchQueryOptionsStep.java | 12 +- .../spi/AbstractSearchQuerySelectStep.java | 8 +- .../query/spi/SearchQueryIndexScope.java | 16 +- .../sort/dsl/CompositeSortComponentsStep.java | 2 +- .../sort/dsl/DistanceSortOptionsStep.java | 4 +- .../sort/dsl/ExtendedSearchSortFactory.java | 8 +- .../sort/dsl/FieldSortOptionsGenericStep.java | 4 +- .../search/sort/dsl/FieldSortOptionsStep.java | 7 +- .../search/sort/dsl/SearchSortFactory.java | 113 +--- .../sort/dsl/SearchSortFactoryExtension.java | 8 +- ...rtFactoryExtensionIfSupportedMoreStep.java | 8 +- ...chSortFactoryExtensionIfSupportedStep.java | 4 +- .../search/sort/dsl/SortFilterStep.java | 4 +- .../engine/search/sort/dsl/SortThenStep.java | 2 +- .../sort/dsl/TypedSearchSortFactory.java | 246 ++++++++ .../AbstractFieldSortOptionsGenericStep.java | 14 +- .../impl/CompositeSortComponentsStepImpl.java | 4 +- .../dsl/impl/DistanceSortOptionsStepImpl.java | 4 +- .../impl/SearchSortFactoryExtensionStep.java | 8 +- .../dsl/spi/AbstractSearchSortFactory.java | 6 +- .../sort/dsl/spi/AbstractSortThenStep.java | 4 +- .../sort/dsl/spi/SearchSortDslContext.java | 16 +- .../dsl/spi/SearchSortFactoryDelegate.java | 96 +++ ...ticsearchKnnPredicateMultipleShardsIT.java | 8 +- .../ElasticsearchShardsFailedExceptionIT.java | 4 +- .../ElasticsearchBoolSearchPredicateIT.java | 6 +- .../util/ElasticsearchTckBackendHelper.java | 4 +- .../LuceneIndexReaderCodecLoadingIT.java | 8 +- .../reader/LuceneIndexSegmentFilesIT.java | 8 +- .../search/LuceneBoolSearchPredicateIT.java | 6 +- .../util/LuceneTckBackendHelper.java | 4 +- .../backend/tck/dynamic/FieldTemplateIT.java | 4 +- .../tck/dynamic/ObjectFieldTemplateIT.java | 4 +- .../search/aggregation/AggregationBaseIT.java | 10 +- .../RangeAggregationSpecificsIT.java | 4 +- .../SingleFieldAggregationBaseIT.java | 16 +- ...ggregationTypeCheckingAndConversionIT.java | 10 +- .../bool/BooleanSortAndRangePredicateIT.java | 9 +- ...bstractBaseQueryStringPredicateBaseIT.java | 89 +-- ...ctBaseQueryStringPredicateSpecificsIT.java | 4 +- .../AbstractPredicateArgumentCheckingIT.java | 6 +- ...stractPredicateConfigurableAnalysisIT.java | 6 +- ...AbstractPredicateFieldInObjectFieldIT.java | 8 +- .../AbstractPredicateFieldScoreIT.java | 26 +- .../AbstractPredicateInObjectFieldIT.java | 4 +- .../AbstractPredicateInvalidFieldIT.java | 10 +- .../AbstractPredicateMultiFieldIT.java | 8 +- .../AbstractPredicateScaleCheckingIT.java | 4 +- .../predicate/AbstractPredicateScoreIT.java | 10 +- .../AbstractPredicateSearchableIT.java | 8 +- .../AbstractPredicateSimpleAnalysisIT.java | 4 +- .../AbstractPredicateSingleFieldIT.java | 6 +- ...tPredicateTypeCheckingAndConversionIT.java | 36 +- ...ctPredicateTypeCheckingNoConversionIT.java | 6 +- .../AbstractPredicateUnsupportedTypeIT.java | 6 +- .../search/predicate/AndPredicateBaseIT.java | 18 +- .../search/predicate/BoolPredicateBaseIT.java | 10 +- .../predicate/BoolPredicateSpecificsIT.java | 6 +- .../predicate/ExistsPredicateBaseIT.java | 26 +- .../ExistsPredicateObjectsBaseIT.java | 14 +- .../ExistsPredicateObjectsSpecificsIT.java | 10 +- .../search/predicate/KnnPredicateBaseIT.java | 31 +- .../predicate/KnnPredicateSpecificsIT.java | 40 +- .../predicate/MatchAllPredicateBaseIT.java | 12 +- .../MatchAllPredicateSpecificsIT.java | 6 +- .../predicate/MatchIdPredicateBaseIT.java | 12 +- .../MatchIdPredicateSpecificsIT.java | 4 +- .../MatchNonePredicateSpecificsIT.java | 4 +- .../predicate/MatchPredicateBaseIT.java | 55 +- .../predicate/MatchPredicateSpecificsIT.java | 8 +- .../predicate/NamedPredicateBaseIT.java | 14 +- .../predicate/NestedPredicateLegacyIT.java | 4 +- .../predicate/NestedPredicateSpecificsIT.java | 4 +- .../search/predicate/NotPredicateBaseIT.java | 10 +- .../predicate/NotPredicateSpecificsIT.java | 4 +- .../search/predicate/OrPredicateBaseIT.java | 18 +- .../predicate/PhrasePredicateBaseIT.java | 49 +- .../predicate/PrefixPredicateBaseIT.java | 41 +- .../predicate/QueryStringPredicateBaseIT.java | 4 +- .../QueryStringPredicateSpecificsIT.java | 4 +- .../predicate/RangePredicateBaseIT.java | 53 +- .../predicate/RegexpPredicateBaseIT.java | 41 +- .../search/predicate/SearchPredicateIT.java | 10 +- .../SimpleQueryStringPredicateBaseIT.java | 4 +- ...SimpleQueryStringPredicateSpecificsIT.java | 4 +- ...atialWithinBoundingBoxPredicateBaseIT.java | 41 +- .../SpatialWithinCirclePredicateBaseIT.java | 43 +- .../SpatialWithinPolygonPredicateBaseIT.java | 41 +- .../predicate/TermsPredicateBaseIT.java | 52 +- .../predicate/WildcardPredicateBaseIT.java | 41 +- .../AbstractCompositeProjectionFromAsIT.java | 27 +- ...ctDistanceProjectionMultiValuedBaseIT.java | 10 +- ...tDistanceProjectionSingleValuedBaseIT.java | 12 +- ...bstractProjectionInObjectProjectionIT.java | 6 +- .../AbstractProjectionInvalidFieldIT.java | 10 +- .../AbstractProjectionProjectableIT.java | 10 +- .../AbstractProjectionUnsupportedTypesIT.java | 4 +- .../projection/CompositeProjectionBaseIT.java | 6 +- .../projection/DistanceProjectionBaseIT.java | 12 +- ...rojectionMultiValuedAccumulatorBaseIT.java | 10 +- .../DistanceProjectionMultiValuedBaseIT.java | 10 +- ...eProjectionParameterMultiValuedBaseIT.java | 10 +- ...ProjectionParameterSingleValuedBaseIT.java | 12 +- .../DistanceProjectionSingleValuedBaseIT.java | 12 +- .../projection/FieldProjectionBaseIT.java | 10 +- .../projection/ObjectProjectionBaseIT.java | 6 +- .../ObjectProjectionSpecificsIT.java | 6 +- .../search/projection/SearchProjectionIT.java | 10 +- .../tck/search/query/SearchQueryBaseIT.java | 12 +- .../sort/AbstractSortInvalidFieldIT.java | 10 +- .../search/sort/AbstractSortSortableIT.java | 10 +- .../sort/AbstractSortUnsupportedTypesIT.java | 4 +- .../tck/search/sort/CompositeSortIT.java | 6 +- .../tck/search/sort/DistanceSortBaseIT.java | 8 +- .../sort/DistanceSortDynamicFieldIT.java | 9 +- .../DistanceSortFilteringSpecificsIT.java | 6 +- .../search/sort/DistanceSortSpecificsIT.java | 6 +- ...stanceSortTypeCheckingAndConversionIT.java | 6 +- .../tck/search/sort/FieldSortBaseIT.java | 8 +- .../search/sort/FieldSortDynamicFieldIT.java | 6 +- .../sort/FieldSortFilteringSpecificsIT.java | 6 +- .../tck/search/sort/FieldSortSpecificsIT.java | 22 +- .../FieldSortTypeCheckingAndConversionIT.java | 8 +- .../backend/tck/search/sort/SearchSortIT.java | 16 +- .../MetricAggregationsTestCase.java | 4 +- .../RangeAggregationDescriptor.java | 12 +- .../TermsAggregationDescriptor.java | 13 +- .../expectations/AggregationScenario.java | 12 +- ...tedSingleFieldAggregationExpectations.java | 4 +- .../testsupport/util/TckBackendHelper.java | 6 +- .../RealBackendDatabaseMultitenancyIT.java | 10 +- .../orm/dynamicmap/DynamicMapBaseIT.java | 4 +- .../mapper/orm/mapping/SearchMappingIT.java | 8 +- .../mapper/orm/search/SearchQueryBaseIT.java | 12 +- .../mapper/pojo/mapping/SearchMappingIT.java | 6 +- ...tomConstructorMappingAnnotationBaseIT.java | 4 +- ...ethodParameterMappingAnnotationBaseIT.java | 4 +- .../AbstractProjectionConstructorIT.java | 4 +- ...jectionConstructorProjectionBindingIT.java | 8 +- .../pojo/smoke/AnnotationMappingSmokeIT.java | 2 +- .../smoke/ProgrammaticMappingSmokeIT.java | 2 +- ...ectionConstructorDistanceProjectionIT.java | 12 +- .../realbackend/mapping/VectorFieldIT.java | 6 +- .../orm/elasticsearch/AggregationTypesIT.java | 4 +- .../elasticsearch/EntityAsTreeSmokeIT.java | 6 +- .../orm/elasticsearch/FieldTypesIT.java | 4 +- .../orm/elasticsearch/PredicateTypesIT.java | 4 +- .../orm/elasticsearch/ProjectionTypesIT.java | 4 +- .../orm/elasticsearch/SortTypesIT.java | 4 +- .../orm/lucene/AggregationTypesIT.java | 4 +- .../orm/lucene/EntityAsTreeSmokeIT.java | 6 +- .../metamodel/orm/lucene/FieldTypesIT.java | 4 +- .../orm/lucene/PredicateTypesIT.java | 4 +- .../orm/lucene/ProjectionTypesIT.java | 4 +- .../metamodel/orm/lucene/SortTypesIT.java | 4 +- .../elasticsearch/AggregationTypesIT.java | 4 +- .../elasticsearch/EntityAsTreeSmokeIT.java | 11 +- .../elasticsearch/FieldTypesIT.java | 4 +- .../elasticsearch/PredicateTypesIT.java | 4 +- .../elasticsearch/ProjectionTypesIT.java | 4 +- .../standalone/elasticsearch/SortTypesIT.java | 4 +- .../standalone/lucene/AggregationTypesIT.java | 4 +- .../lucene/EntityAsTreeSmokeIT.java | 8 +- .../standalone/lucene/FieldTypesIT.java | 4 +- .../standalone/lucene/PredicateTypesIT.java | 4 +- .../standalone/lucene/ProjectionTypesIT.java | 4 +- .../standalone/lucene/SortTypesIT.java | 4 +- ...ationStandalonePojoSearchScopeAdapter.java | 24 +- .../backend/lucene/LuceneExtension.java | 16 +- .../predicate/impl/LuceneNamedPredicate.java | 6 +- .../dsl/LuceneSearchProjectionFactory.java | 4 +- .../orm/mapping/impl/HibernateOrmMapping.java | 39 +- .../scope/HibernateOrmRootReferenceScope.java | 2 +- .../search/mapper/orm/scope/SearchScope.java | 13 +- .../mapper/orm/scope/SearchScopeProvider.java | 41 +- .../mapper/orm/scope/TypedSearchScope.java | 236 ++++++++ .../orm/scope/impl/SearchScopeDelegate.java | 123 ++++ .../orm/scope/impl/SearchScopeSearcher.java | 17 + ...opeImpl.java => TypedSearchScopeImpl.java} | 25 +- .../mapper/orm/session/SearchSession.java | 27 +- .../session/impl/DelegatingSearchSession.java | 23 +- .../impl/HibernateOrmSearchSession.java | 35 +- ...bernateOrmSearchSessionMappingContext.java | 6 +- .../mapper/orm/spi/BatchMappingContext.java | 6 +- .../annotation/CompositeProjection.java | 4 +- .../annotation/DistanceProjection.java | 8 +- .../DocumentReferenceProjection.java | 4 +- .../annotation/EntityProjection.java | 4 +- .../annotation/EntityReferenceProjection.java | 4 +- .../annotation/FieldProjection.java | 10 +- .../annotation/HighlightProjection.java | 6 +- .../definition/annotation/IdProjection.java | 4 +- .../annotation/ObjectProjection.java | 6 +- .../annotation/ProjectionBinding.java | 4 +- .../annotation/ScoreProjection.java | 4 +- .../MethodParameterMappingStep.java | 10 +- .../scope/impl/PojoScopeDelegateImpl.java | 18 +- .../pojo/scope/spi/PojoScopeDelegate.java | 22 +- .../binding/ProjectionBindingContext.java | 10 +- .../builtin/CompositeProjectionBinder.java | 4 +- .../builtin/DistanceProjectionBinder.java | 12 +- .../DocumentReferenceProjectionBinder.java | 6 +- .../builtin/EntityProjectionBinder.java | 6 +- .../EntityReferenceProjectionBinder.java | 6 +- .../builtin/FieldProjectionBinder.java | 8 +- .../builtin/HighlightProjectionBinder.java | 6 +- .../binding/builtin/IdProjectionBinder.java | 6 +- .../builtin/ObjectProjectionBinder.java | 3 +- .../builtin/ScoreProjectionBinder.java | 6 +- .../PojoConstructorProjectionDefinition.java | 4 +- .../mapping/impl/StandalonePojoMapping.java | 35 +- .../pojo/standalone/scope/SearchScope.java | 12 +- .../standalone/scope/SearchScopeProvider.java | 25 +- .../StandalonePojoRootReferenceScope.java | 2 +- .../standalone/scope/TypedSearchScope.java | 234 ++++++++ .../scope/impl/SearchScopeDelegate.java | 114 ++++ .../scope/impl/SearchScopeSearcher.java | 15 + ...opeImpl.java => TypedSearchScopeImpl.java} | 25 +- .../standalone/session/SearchSession.java | 21 +- .../impl/StandalonePojoSearchSession.java | 36 +- ...dalonePojoSearchSessionMappingContext.java | 6 +- .../writer/impl/MetamodelClassWriter.java | 10 +- .../impl/StubSearchAggregationFactory.java | 6 +- .../common/impl/StubSearchIndexScope.java | 16 +- .../predicate/impl/StubSearchPredicate.java | 4 +- .../sort/dsl/impl/StubSearchSortFactory.java | 6 +- .../mapper/stub/GenericStubMappingScope.java | 16 +- .../search/engine/ProjectionConstants.java | 16 +- .../search/query/dsl/QueryBuilder.java | 18 +- ...tractConnectedMultiFieldsQueryBuilder.java | 6 +- .../query/dsl/impl/BooleanQueryBuilder.java | 4 +- .../query/dsl/impl/ConnectedAllContext.java | 4 +- ...ConnectedMultiFieldsMatchQueryBuilder.java | 4 +- ...onnectedMultiFieldsPhraseQueryBuilder.java | 4 +- ...ConnectedMultiFieldsRangeQueryBuilder.java | 4 +- ...tiFieldsSimpleQueryStringQueryBuilder.java | 4 +- ...nectedMultiFieldsWildcardQueryBuilder.java | 5 +- .../impl/ConnectedSpatialQueryBuilder.java | 4 +- .../query/dsl/impl/DiscreteFacetRequest.java | 4 +- .../query/dsl/impl/FacetingRequestImpl.java | 4 +- .../query/dsl/impl/QueryCustomizer.java | 6 +- .../query/dsl/impl/RangeFacetRequest.java | 4 +- .../query/dsl/sort/impl/SortFieldStates.java | 4 +- .../search/query/engine/impl/HSQueryImpl.java | 6 +- .../scope/spi/V5MigrationSearchScope.java | 16 +- .../org/hibernate/search/FullTextQuery.java | 4 +- .../org/hibernate/search/SearchFactory.java | 10 +- .../search/jpa/FullTextEntityManager.java | 6 +- .../hibernate/search/jpa/FullTextQuery.java | 8 +- .../V5MigrationOrmSearchScopeAdapter.java | 28 +- 376 files changed, 4455 insertions(+), 2672 deletions(-) create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TypedSearchAggregationFactory.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationFactoryDelegate.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/common/NonStaticMetamodelScope.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/TypedSearchPredicateFactory.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/spi/SearchPredicateFactoryDelegate.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/TypedSearchProjectionFactory.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/projection/dsl/spi/SearchProjectionFactoryDelegate.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/TypedSearchSortFactory.java create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/spi/SearchSortFactoryDelegate.java create mode 100644 mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/TypedSearchScope.java create mode 100644 mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/SearchScopeDelegate.java create mode 100644 mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/SearchScopeSearcher.java rename mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/{SearchScopeImpl.java => TypedSearchScopeImpl.java} (85%) create mode 100644 mapper/pojo-standalone/src/main/java/org/hibernate/search/mapper/pojo/standalone/scope/TypedSearchScope.java create mode 100644 mapper/pojo-standalone/src/main/java/org/hibernate/search/mapper/pojo/standalone/scope/impl/SearchScopeDelegate.java create mode 100644 mapper/pojo-standalone/src/main/java/org/hibernate/search/mapper/pojo/standalone/scope/impl/SearchScopeSearcher.java rename mapper/pojo-standalone/src/main/java/org/hibernate/search/mapper/pojo/standalone/scope/impl/{SearchScopeImpl.java => TypedSearchScopeImpl.java} (84%) 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 e7b04f5ddf3..c54a73de832 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 @@ -22,21 +22,21 @@ import org.hibernate.search.engine.backend.types.dsl.IndexFieldTypeFactoryExtension; import org.hibernate.search.engine.common.schema.management.SchemaExport; import org.hibernate.search.engine.common.schema.management.SchemaExportExtension; -import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactoryExtension; +import org.hibernate.search.engine.search.aggregation.dsl.TypedSearchAggregationFactory; import org.hibernate.search.engine.search.loading.spi.SearchLoadingContext; import org.hibernate.search.engine.search.loading.spi.SearchLoadingContextBuilder; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactoryExtension; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactoryExtension; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.engine.search.query.SearchQuery; import org.hibernate.search.engine.search.query.SearchQueryExtension; import org.hibernate.search.engine.search.query.dsl.SearchQueryDslExtension; import org.hibernate.search.engine.search.query.dsl.SearchQuerySelectStep; import org.hibernate.search.engine.search.query.spi.SearchQueryIndexScope; -import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; import org.hibernate.search.engine.search.sort.dsl.SearchSortFactoryExtension; +import org.hibernate.search.engine.search.sort.dsl.TypedSearchSortFactory; /** * An extension for the Elasticsearch backend, giving access to Elasticsearch-specific features. @@ -137,7 +137,7 @@ public Optional> extendOptional(SearchQuery origi * {@inheritDoc} */ @Override - public Optional> extendOptional(SearchPredicateFactory original) { + public Optional> extendOptional(TypedSearchPredicateFactory original) { if ( original instanceof ElasticsearchSearchPredicateFactory ) { return Optional.of( (ElasticsearchSearchPredicateFactory) original ); } @@ -151,7 +151,7 @@ public Optional> extendOptional(SearchPr */ @Override public Optional> extendOptional( - SearchSortFactory original) { + TypedSearchSortFactory original) { if ( original instanceof ElasticsearchSearchSortFactory ) { return Optional.of( (ElasticsearchSearchSortFactory) original ); } @@ -164,7 +164,8 @@ public Optional> extendOptional( * {@inheritDoc} */ @Override - public Optional> extendOptional(SearchProjectionFactory original) { + public Optional> extendOptional( + TypedSearchProjectionFactory original) { if ( original instanceof ElasticsearchSearchProjectionFactory ) { return Optional.of( (ElasticsearchSearchProjectionFactory) original ); } @@ -178,7 +179,7 @@ public Optional> extendOptional(S */ @Override public Optional> extendOptional( - SearchAggregationFactory original) { + TypedSearchAggregationFactory original) { if ( original instanceof ElasticsearchSearchAggregationFactory ) { return Optional.of( (ElasticsearchSearchAggregationFactory) original ); } 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 b024823eac4..f4b8eb37ea8 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 @@ -14,7 +14,7 @@ import org.hibernate.search.engine.search.common.spi.SearchQueryElementFactory; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.definition.PredicateDefinition; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.predicate.spi.NamedPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.NamedValuesBasedPredicateDefinitionContext; @@ -71,7 +71,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu private final PredicateDefinition definition; private final String predicateName; private final ElasticsearchSearchIndexCompositeNodeContext field; - private SearchPredicateFactory factory; + private TypedSearchPredicateFactory factory; private final Map params = new LinkedHashMap<>(); Builder(PredicateDefinition definition, String predicateName, @@ -84,7 +84,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu } @Override - public void factory(SearchPredicateFactory factory) { + public void factory(TypedSearchPredicateFactory factory) { this.factory = factory; } diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/projection/dsl/ElasticsearchSearchProjectionFactory.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/projection/dsl/ElasticsearchSearchProjectionFactory.java index f6485bfacbf..c626a0c9711 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/projection/dsl/ElasticsearchSearchProjectionFactory.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/search/projection/dsl/ElasticsearchSearchProjectionFactory.java @@ -6,7 +6,7 @@ import org.hibernate.search.engine.search.projection.dsl.ExtendedSearchProjectionFactory; import org.hibernate.search.engine.search.projection.dsl.ProjectionFinalStep; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import com.google.gson.JsonObject; @@ -16,7 +16,7 @@ * @param Scope root type. * @param The type of entity references. * @param The type of entities. - * @see SearchProjectionFactory + * @see TypedSearchProjectionFactory */ public interface ElasticsearchSearchProjectionFactory extends ExtendedSearchProjectionFactory, R, E> { 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 43a4eb1fecb..cafc6a868a9 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 @@ -25,21 +25,21 @@ import org.hibernate.search.engine.backend.types.dsl.IndexFieldTypeFactoryExtension; import org.hibernate.search.engine.common.schema.management.SchemaExport; import org.hibernate.search.engine.common.schema.management.SchemaExportExtension; -import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactoryExtension; +import org.hibernate.search.engine.search.aggregation.dsl.TypedSearchAggregationFactory; import org.hibernate.search.engine.search.loading.spi.SearchLoadingContext; import org.hibernate.search.engine.search.loading.spi.SearchLoadingContextBuilder; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactoryExtension; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactoryExtension; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.engine.search.query.SearchQuery; import org.hibernate.search.engine.search.query.SearchQueryExtension; import org.hibernate.search.engine.search.query.dsl.SearchQueryDslExtension; import org.hibernate.search.engine.search.query.dsl.SearchQuerySelectStep; import org.hibernate.search.engine.search.query.spi.SearchQueryIndexScope; -import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; import org.hibernate.search.engine.search.sort.dsl.SearchSortFactoryExtension; +import org.hibernate.search.engine.search.sort.dsl.TypedSearchSortFactory; /** * An extension for the Lucene backend, giving access to Lucene-specific features. @@ -140,7 +140,7 @@ public Optional> extendOptional(SearchQuery original, * {@inheritDoc} */ @Override - public Optional> extendOptional(SearchPredicateFactory original) { + public Optional> extendOptional(TypedSearchPredicateFactory original) { if ( original instanceof LuceneSearchPredicateFactory ) { return Optional.of( (LuceneSearchPredicateFactory) original ); } @@ -154,7 +154,7 @@ public Optional> extendOptional(SearchPredicate */ @Override public Optional> extendOptional( - SearchSortFactory original) { + TypedSearchSortFactory original) { if ( original instanceof LuceneSearchSortFactory ) { return Optional.of( (LuceneSearchSortFactory) original ); } @@ -167,7 +167,7 @@ public Optional> extendOptional( * {@inheritDoc} */ @Override - public Optional> extendOptional(SearchProjectionFactory original) { + public Optional> extendOptional(TypedSearchProjectionFactory original) { if ( original instanceof LuceneSearchProjectionFactory ) { return Optional.of( (LuceneSearchProjectionFactory) original ); } @@ -180,7 +180,7 @@ public Optional> extendOptional(SearchPr * {@inheritDoc} */ @Override - public Optional> extendOptional(SearchAggregationFactory original) { + public Optional> extendOptional(TypedSearchAggregationFactory original) { if ( original instanceof LuceneSearchAggregationFactory ) { return Optional.of( (LuceneSearchAggregationFactory) original ); } 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 8da0453254e..a37b3074ad5 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 @@ -14,7 +14,7 @@ import org.hibernate.search.engine.search.common.spi.SearchQueryElementFactory; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.definition.PredicateDefinition; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.predicate.spi.NamedPredicateBuilder; import org.hibernate.search.engine.search.predicate.spi.NamedValuesBasedPredicateDefinitionContext; @@ -70,7 +70,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu private final PredicateDefinition definition; private final String predicateName; private final LuceneSearchIndexCompositeNodeContext field; - private SearchPredicateFactory factory; + private TypedSearchPredicateFactory factory; private final Map params = new LinkedHashMap<>(); Builder(PredicateDefinition definition, String predicateName, LuceneSearchIndexScope scope, @@ -82,7 +82,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu } @Override - public void factory(SearchPredicateFactory factory) { + public void factory(TypedSearchPredicateFactory factory) { this.factory = factory; } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/projection/dsl/LuceneSearchProjectionFactory.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/projection/dsl/LuceneSearchProjectionFactory.java index 94d8717e4c0..6e6222c30ac 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/projection/dsl/LuceneSearchProjectionFactory.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/projection/dsl/LuceneSearchProjectionFactory.java @@ -6,7 +6,7 @@ import org.hibernate.search.engine.search.projection.dsl.ExtendedSearchProjectionFactory; import org.hibernate.search.engine.search.projection.dsl.ProjectionFinalStep; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.util.common.annotation.Incubating; import org.apache.lucene.document.Document; @@ -18,7 +18,7 @@ * @param Scope root type. * @param The type of entity references. * @param The type of entities. - * @see SearchProjectionFactory + * @see TypedSearchProjectionFactory */ public interface LuceneSearchProjectionFactory extends ExtendedSearchProjectionFactory, R, E> { 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 da1f2cb468f..a5623545a32 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 @@ -12,7 +12,7 @@ import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.definition.PredicateDefinition; import org.hibernate.search.engine.search.predicate.definition.PredicateDefinitionContext; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.mapper.pojo.bridge.PropertyBridge; import org.hibernate.search.mapper.pojo.bridge.binding.PropertyBindingContext; import org.hibernate.search.mapper.pojo.bridge.mapping.programmatic.PropertyBinder; @@ -89,7 +89,7 @@ public void write(DocumentElement target, String skuId, PropertyBridgeWriteConte private static class SkuIdentifierMatchPredicateDefinition implements PredicateDefinition { // <1> @Override public SearchPredicate create(PredicateDefinitionContext context) { - SearchPredicateFactory f = context.predicate(); // <2> + TypedSearchPredicateFactory f = context.predicate(); // <2> String pattern = context.params().get( "pattern", String.class ); // <3> diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/constructorparameter/MyFieldProjectionBinder.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/constructorparameter/MyFieldProjectionBinder.java index b7ecbd508bc..7ae8c3862d4 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/constructorparameter/MyFieldProjectionBinder.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/constructorparameter/MyFieldProjectionBinder.java @@ -7,7 +7,7 @@ import org.hibernate.search.engine.search.projection.SearchProjection; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinition; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinitionContext; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBinder; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBindingContext; @@ -31,7 +31,7 @@ private MyProjectionDefinition(String fieldName) { } @Override - public SearchProjection create(SearchProjectionFactory factory, + public SearchProjection create(TypedSearchProjectionFactory factory, ProjectionDefinitionContext context) { return factory.field( fieldName, String.class ) // <3> .toProjection(); diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/multi/MyFieldProjectionBinder.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/multi/MyFieldProjectionBinder.java index b45d0c8f3ad..34aa18e3d99 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/multi/MyFieldProjectionBinder.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/multi/MyFieldProjectionBinder.java @@ -11,7 +11,7 @@ import org.hibernate.search.engine.search.projection.SearchProjection; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinition; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinitionContext; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.mapper.pojo.model.PojoModelValue; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBinder; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBindingContext; @@ -32,7 +32,7 @@ public void bind(ProjectionBindingContext context) { private static class MyProjectionDefinition implements ProjectionDefinition> { // <4> @Override - public SearchProjection> create(SearchProjectionFactory factory, + public SearchProjection> create(TypedSearchProjectionFactory factory, ProjectionDefinitionContext context) { return factory.field( "tags", String.class ) .collector( ProjectionCollector.list() ) // <4> diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/annotation/MyFieldProjectionBinder.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/annotation/MyFieldProjectionBinder.java index 5c3317e60fb..75b991222ca 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/annotation/MyFieldProjectionBinder.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/annotation/MyFieldProjectionBinder.java @@ -7,7 +7,7 @@ import org.hibernate.search.engine.search.projection.SearchProjection; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinition; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinitionContext; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBinder; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBindingContext; @@ -39,7 +39,7 @@ public MyProjectionDefinition(String fieldName) { // <2> } @Override - public SearchProjection create(SearchProjectionFactory factory, + public SearchProjection create(TypedSearchProjectionFactory factory, ProjectionDefinitionContext context) { return factory.field( fieldName, String.class ) // <3> .toProjection(); diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/string/MyFieldProjectionBinder.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/string/MyFieldProjectionBinder.java index f98e6497247..def528a7913 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/string/MyFieldProjectionBinder.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/param/string/MyFieldProjectionBinder.java @@ -7,7 +7,7 @@ import org.hibernate.search.engine.search.projection.SearchProjection; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinition; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinitionContext; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBinder; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBindingContext; @@ -32,7 +32,7 @@ public MyProjectionDefinition(String fieldName) { // <2> } @Override - public SearchProjection create(SearchProjectionFactory factory, + public SearchProjection create(TypedSearchProjectionFactory factory, ProjectionDefinitionContext context) { return factory.field( fieldName, String.class ) // <3> .toProjection(); diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/simple/MyFieldProjectionBinder.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/simple/MyFieldProjectionBinder.java index e8b3cfdecc2..b9e9458695b 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/simple/MyFieldProjectionBinder.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/binding/projectionbinder/simple/MyFieldProjectionBinder.java @@ -7,7 +7,7 @@ import org.hibernate.search.engine.search.projection.SearchProjection; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinition; import org.hibernate.search.engine.search.projection.definition.ProjectionDefinitionContext; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBinder; import org.hibernate.search.mapper.pojo.search.definition.binding.ProjectionBindingContext; @@ -29,7 +29,7 @@ public void bind(ProjectionBindingContext context) { // <2> private static class MyProjectionDefinition // <1> implements ProjectionDefinition { // <2> @Override - public SearchProjection create(SearchProjectionFactory factory, + public SearchProjection create(TypedSearchProjectionFactory factory, ProjectionDefinitionContext context) { return factory.field( "title", String.class ) // <3> .toProjection(); // <4> diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/entrypoints/HibernateOrmEntryPointsIT.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/entrypoints/HibernateOrmEntryPointsIT.java index e1c8df2b9f3..bd584a3fb5a 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/entrypoints/HibernateOrmEntryPointsIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/entrypoints/HibernateOrmEntryPointsIT.java @@ -102,13 +102,13 @@ void searchScope_fromSearchMapping() { // end::searchScope-fromSearchMapping[] Search.mapping( theSessionFactory ); // tag::searchScope-fromSearchMapping[] - SearchScope bookScope = searchMapping.scope( Book.class ); // <2> - SearchScope associateAndManagerScope = + SearchScope bookScope = searchMapping.scope( Book.class ); // <2> + SearchScope associateAndManagerScope = searchMapping.scope( Arrays.asList( Associate.class, Manager.class ) ); // <3> - SearchScope personScope = searchMapping.scope( Person.class ); // <4> - SearchScope personSubTypesScope = searchMapping.scope( Person.class, + SearchScope personScope = searchMapping.scope( Person.class ); // <4> + SearchScope personSubTypesScope = searchMapping.scope( Person.class, Arrays.asList( "Manager", "Associate" ) ); // <5> - SearchScope allScope = searchMapping.scope( Object.class ); // <6> + SearchScope allScope = searchMapping.scope( Object.class ); // <6> // end::searchScope-fromSearchMapping[] assertThat( bookScope.includedTypes() ) .extracting( SearchIndexedEntity::jpaName ) @@ -135,13 +135,13 @@ void searchScope_fromSearchSession() { // end::searchScope-fromSearchSession[] Search.session( theSession ); // tag::searchScope-fromSearchSession[] - SearchScope bookScope = searchSession.scope( Book.class ); // <2> - SearchScope associateAndManagerScope = + SearchScope bookScope = searchSession.scope( Book.class ); // <2> + SearchScope associateAndManagerScope = searchSession.scope( Arrays.asList( Associate.class, Manager.class ) ); // <3> - SearchScope personScope = searchSession.scope( Person.class ); // <4> - SearchScope personSubTypesScope = searchSession.scope( Person.class, + SearchScope personScope = searchSession.scope( Person.class ); // <4> + SearchScope personSubTypesScope = searchSession.scope( Person.class, Arrays.asList( "Manager", "Associate" ) ); // <5> - SearchScope allScope = searchSession.scope( Object.class ); // <6> + SearchScope allScope = searchSession.scope( Object.class ); // <6> // end::searchScope-fromSearchSession[] assertThat( bookScope.includedTypes() ) .extracting( SearchIndexedEntity::jpaName ) diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java index 9ac10fc6ffd..9372014968a 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java @@ -99,7 +99,7 @@ void test() { // Not shown: get the entity manager and open a transaction SearchSession searchSession = Search.session( entityManager ); // <1> - SearchScope scope = searchSession.scope( Book.class ); // <2> + SearchScope scope = searchSession.scope( Book.class ); // <2> SearchResult result = searchSession.search( scope ) // <3> .where( scope.predicate().match() // <4> diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/entrypoints/StandalonePojoEntryPointsIT.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/entrypoints/StandalonePojoEntryPointsIT.java index 97d93a883c6..53caf50365c 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/entrypoints/StandalonePojoEntryPointsIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/entrypoints/StandalonePojoEntryPointsIT.java @@ -114,13 +114,13 @@ void searchSession_withOptions() { @Test void searchScope_fromSearchMapping() { SearchMapping searchMapping = theSearchMapping; - SearchScope bookScope = searchMapping.scope( Book.class ); - SearchScope associateAndManagerScope = + SearchScope bookScope = searchMapping.scope( Book.class ); + SearchScope associateAndManagerScope = searchMapping.scope( Arrays.asList( Associate.class, Manager.class ) ); - SearchScope personScope = searchMapping.scope( Person.class ); - SearchScope personSubTypesScope = searchMapping.scope( Person.class, + SearchScope personScope = searchMapping.scope( Person.class ); + SearchScope personSubTypesScope = searchMapping.scope( Person.class, Arrays.asList( "Manager", "Associate" ) ); - SearchScope allScope = searchMapping.scope( Object.class ); + SearchScope allScope = searchMapping.scope( Object.class ); assertThat( bookScope.includedTypes() ) .extracting( SearchIndexedEntity::name ) .containsExactlyInAnyOrder( "Book" ); @@ -142,13 +142,13 @@ void searchScope_fromSearchMapping() { void searchScope_fromSearchSession() { SearchMapping searchMapping = theSearchMapping; try ( SearchSession searchSession = searchMapping.createSession() ) { - SearchScope bookScope = searchSession.scope( Book.class ); - SearchScope associateAndManagerScope = + SearchScope bookScope = searchSession.scope( Book.class ); + SearchScope associateAndManagerScope = searchSession.scope( Arrays.asList( Associate.class, Manager.class ) ); - SearchScope personScope = searchSession.scope( Person.class ); - SearchScope personSubTypesScope = searchSession.scope( Person.class, + SearchScope personScope = searchSession.scope( Person.class ); + SearchScope personSubTypesScope = searchSession.scope( Person.class, Arrays.asList( "Manager", "Associate" ) ); - SearchScope allScope = searchSession.scope( Object.class ); + SearchScope allScope = searchSession.scope( Object.class ); assertThat( bookScope.includedTypes() ) .extracting( SearchIndexedEntity::name ) .containsExactlyInAnyOrder( "Book" ); diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java index 5d299f90fcc..2ea915c665b 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/pojo/standalone/gettingstarted/withhsearch/defaultanalysis/GettingStartedDefaultAnalysisIT.java @@ -102,7 +102,7 @@ void test() { // tag::searching-objects[] try ( SearchSession session = searchMapping.createSession() ) { // <1> - SearchScope scope = session.scope( Book.class ); // <2> + SearchScope scope = session.scope( Book.class ); // <2> SearchResult result = session.search( scope ) // <3> .select( f -> f.id( Integer.class ) ) // <4> diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/aggregation/AggregationDslIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/aggregation/AggregationDslIT.java index 8b1dcd7b601..fb1e2ef83a1 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/search/aggregation/AggregationDslIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/aggregation/AggregationDslIT.java @@ -85,7 +85,7 @@ void entryPoint() { Search.session( entityManager ); // tag::entryPoint-objects[] - SearchScope scope = searchSession.scope( Book.class ); + SearchScope scope = searchSession.scope( Book.class ); AggregationKey> countsByGenreKey = AggregationKey.of( "countsByGenre" ); diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/paths/FieldPathsIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/paths/FieldPathsIT.java index b8cb092ad01..bae23e8e39f 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/search/paths/FieldPathsIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/paths/FieldPathsIT.java @@ -15,7 +15,7 @@ import org.hibernate.search.documentation.testsupport.BackendConfigurations; import org.hibernate.search.documentation.testsupport.DocumentationSetupHelper; import org.hibernate.search.engine.search.predicate.SearchPredicate; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.mapper.orm.Search; import org.hibernate.search.mapper.orm.session.SearchSession; @@ -114,7 +114,7 @@ void withRoot() { } // tag::withRoot_method[] - private SearchPredicate matchFirstAndLastName(SearchPredicateFactory f, + private SearchPredicate matchFirstAndLastName(TypedSearchPredicateFactory f, String firstName, String lastName) { return f.and( f.match().field( "firstName" ) // <1> 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 index 2ee82df3b42..055fb2c3a15 100644 --- 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 @@ -24,7 +24,7 @@ import org.hibernate.search.engine.backend.types.Projectable; import org.hibernate.search.engine.search.common.ValueModel; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.object.ObjectFieldReference; import org.hibernate.search.engine.search.reference.predicate.ExistsPredicateFieldReference; import org.hibernate.search.engine.search.reference.predicate.MatchPredicateFieldReference; @@ -34,6 +34,7 @@ import org.hibernate.search.mapper.orm.scope.HibernateOrmRootReferenceScope; import org.hibernate.search.mapper.orm.scope.SearchScope; import org.hibernate.search.mapper.orm.scope.SearchScopeProvider; +import org.hibernate.search.mapper.orm.scope.TypedSearchScope; 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.GenericField; @@ -64,7 +65,7 @@ void setup() { void smoke() { withinSearchSession( searchSession -> { - SearchScope scope = ContainingA__.INDEX.scope( searchSession ); + TypedSearchScope scope = ContainingA__.INDEX.scope( searchSession ); assertThat( searchSession.search( scope ) @@ -96,13 +97,13 @@ void smoke() { public static > PredicateFinalStep utilMethodForPredicate( - SearchPredicateFactory factory, ContainingA_e1_e2_Intersection reference) { + TypedSearchPredicateFactory factory, ContainingA_e1_e2_Intersection reference) { return factory.match().field( reference.a() ).matching( "a" ); } public static PredicateFinalStep utilMethodForPredicateNoProjection( - SearchPredicateFactory factory, ContainingA_e1_e2_e3_Intersection reference) { + TypedSearchPredicateFactory factory, ContainingA_e1_e2_e3_Intersection reference) { return factory.match().field( reference.a() ).matching( "a" ); } @@ -110,7 +111,7 @@ public static PredicateFinalStep utilMethodForPredica void smoke2() { withinSearchSession( searchSession -> { - SearchScope scope = searchSession.scope( List.of( ContainingA.class ) ); + SearchScope scope = searchSession.scope( List.of( ContainingA.class ) ); assertThat( searchSession.search( scope ) @@ -293,8 +294,8 @@ public ContainingA__() { } @Override - public SearchScope scope(SearchScopeProvider scopeProvider) { - return scopeProvider.scope( ContainingA.class ); + public TypedSearchScope scope(SearchScopeProvider scopeProvider) { + return scopeProvider.typedScope( ContainingA__.class, List.of( ContainingA.class ) ); } @Override diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/PredicateDslIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/PredicateDslIT.java index b74f6b0f333..382f16f035b 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/PredicateDslIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/predicate/PredicateDslIT.java @@ -118,7 +118,7 @@ void entryPoint() { Search.session( entityManager ); // tag::entryPoint-objects[] - SearchScope scope = searchSession.scope( Book.class ); + SearchScope scope = searchSession.scope( Book.class ); List result = searchSession.search( scope ) .where( scope.predicate().match().field( "title" ) diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/projection/ProjectionDslIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/projection/ProjectionDslIT.java index 1b822f0bc26..2801f65fc0f 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/search/projection/ProjectionDslIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/projection/ProjectionDslIT.java @@ -96,7 +96,7 @@ void entryPoint() { Search.session( entityManager ); // tag::entryPoint-objects[] - SearchScope scope = searchSession.scope( Book.class ); + SearchScope scope = searchSession.scope( Book.class ); List result = searchSession.search( scope ) .select( scope.projection().field( "title", String.class ) diff --git a/documentation/src/test/java/org/hibernate/search/documentation/search/sort/SortDslIT.java b/documentation/src/test/java/org/hibernate/search/documentation/search/sort/SortDslIT.java index dd974590a56..637ef0454c4 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/search/sort/SortDslIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/search/sort/SortDslIT.java @@ -74,7 +74,7 @@ void entryPoint() { Search.session( entityManager ); // tag::entryPoint-objects[] - SearchScope scope = searchSession.scope( Book.class ); + SearchScope scope = searchSession.scope( Book.class ); List result = searchSession.search( scope ) .where( scope.predicate().matchAll().toPredicate() ) diff --git a/engine/src/main/java/org/hibernate/search/engine/backend/metamodel/IndexObjectFieldTypeDescriptor.java b/engine/src/main/java/org/hibernate/search/engine/backend/metamodel/IndexObjectFieldTypeDescriptor.java index c65807090d8..788922072c4 100644 --- a/engine/src/main/java/org/hibernate/search/engine/backend/metamodel/IndexObjectFieldTypeDescriptor.java +++ b/engine/src/main/java/org/hibernate/search/engine/backend/metamodel/IndexObjectFieldTypeDescriptor.java @@ -4,7 +4,7 @@ */ package org.hibernate.search.engine.backend.metamodel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; /** * The type of an "object" field in the index, @@ -16,7 +16,7 @@ public interface IndexObjectFieldTypeDescriptor extends IndexFieldTypeDescriptor /** * @return {@code true} if this object field is represented internally as a nested document, - * enabling features such as the {@link SearchPredicateFactory#nested(String) nested predicate}. + * enabling features such as the {@link TypedSearchPredicateFactory#nested(String) nested predicate}. */ boolean nested(); diff --git a/engine/src/main/java/org/hibernate/search/engine/backend/types/ObjectStructure.java b/engine/src/main/java/org/hibernate/search/engine/backend/types/ObjectStructure.java index 6d32ad3af55..8120ca0d7fd 100644 --- a/engine/src/main/java/org/hibernate/search/engine/backend/types/ObjectStructure.java +++ b/engine/src/main/java/org/hibernate/search/engine/backend/types/ObjectStructure.java @@ -4,7 +4,7 @@ */ package org.hibernate.search.engine.backend.types; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; /** * Defines how the structure of an object field is preserved upon indexing. @@ -70,7 +70,7 @@ public enum ObjectStructure { * but has the advantage of preserving the original structure. * Note however that access to that information when querying * requires special care. - * See in particular the {@link SearchPredicateFactory#nested(String) "nested" predicate}. + * See in particular the {@link TypedSearchPredicateFactory#nested(String) "nested" predicate}. */ NESTED 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 73666e53d9b..55acdbccdcc 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 @@ -8,14 +8,14 @@ import org.hibernate.search.engine.backend.scope.spi.IndexScope; import org.hibernate.search.engine.backend.session.spi.BackendSessionContext; import org.hibernate.search.engine.mapper.scope.spi.MappedIndexScope; -import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; +import org.hibernate.search.engine.search.aggregation.dsl.TypedSearchAggregationFactory; import org.hibernate.search.engine.search.highlighter.dsl.SearchHighlighterFactory; import org.hibernate.search.engine.search.loading.spi.SearchLoadingContextBuilder; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.engine.search.query.dsl.SearchQuerySelectStep; import org.hibernate.search.engine.search.query.dsl.impl.DefaultSearchQuerySelectStep; -import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; +import org.hibernate.search.engine.search.sort.dsl.TypedSearchSortFactory; class MappedIndexScopeImpl implements MappedIndexScope { @@ -31,29 +31,29 @@ public String toString() { } @Override - public SearchQuerySelectStep, ?> search( + public SearchQuerySelectStep, ?> search( BackendSessionContext sessionContext, SearchLoadingContextBuilder loadingContextBuilder) { return new DefaultSearchQuerySelectStep<>( delegate.searchScope(), sessionContext, loadingContextBuilder ); } @Override - public SearchPredicateFactory predicate() { + public TypedSearchPredicateFactory predicate() { return delegate.searchScope().predicateFactory(); } @Override - public SearchSortFactory sort() { + public TypedSearchSortFactory sort() { return delegate.searchScope().sortFactory(); } @Override - public SearchProjectionFactory projection() { + public TypedSearchProjectionFactory projection() { return delegate.searchScope().projectionFactory(); } @Override - public SearchAggregationFactory aggregation() { + public TypedSearchAggregationFactory aggregation() { return delegate.searchScope().aggregationFactory(); } 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 c9e85aaf2a0..8b3fcc9be93 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 @@ -6,22 +6,22 @@ import org.hibernate.search.engine.backend.scope.IndexScopeExtension; import org.hibernate.search.engine.backend.session.spi.BackendSessionContext; -import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; +import org.hibernate.search.engine.search.aggregation.dsl.TypedSearchAggregationFactory; import org.hibernate.search.engine.search.highlighter.dsl.SearchHighlighterFactory; import org.hibernate.search.engine.search.loading.spi.SearchLoadingContextBuilder; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; -import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; +import org.hibernate.search.engine.search.projection.dsl.TypedSearchProjectionFactory; import org.hibernate.search.engine.search.query.dsl.SearchQuerySelectStep; -import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory; +import org.hibernate.search.engine.search.sort.dsl.TypedSearchSortFactory; /** * @param Scope root type. * @param The type of entity references, i.e. the type of hits returned by * {@link SearchQuerySelectStep#selectEntityReference() reference queries}, - * or the type of objects returned for {@link SearchProjectionFactory#entityReference() entity reference projections}. + * or the type of objects returned for {@link TypedSearchProjectionFactory#entityReference() entity reference projections}. * @param The type of entities, i.e. the type of hits returned by * {@link SearchQuerySelectStep#selectEntity() entity queries} - * or the type of objects returned for {@link SearchProjectionFactory#entity() entity projections}. + * or the type of objects returned for {@link TypedSearchProjectionFactory#entity() entity projections}. */ public interface MappedIndexScope { @@ -31,22 +31,22 @@ public interface MappedIndexScope { * will be wrong. * In particular, we cannot accept a LoadingContextBuilder with any T. */ - SearchQuerySelectStep, ?> search( + SearchQuerySelectStep, ?> search( BackendSessionContext sessionContext, SearchLoadingContextBuilder loadingContextBuilder); - SearchPredicateFactory predicate(); + TypedSearchPredicateFactory predicate(); - SearchSortFactory sort(); + TypedSearchSortFactory sort(); /* * IMPLEMENTATION NOTE: we *must* return a factory with the same R/E type arguments as this class, * otherwise some casts in EntityProjectionOptionsStepImpl and EntityReferenceProjectionOptionsStepImpl * will be wrong. */ - SearchProjectionFactory projection(); + TypedSearchProjectionFactory projection(); - SearchAggregationFactory aggregation(); + TypedSearchAggregationFactory aggregation(); SearchHighlighterFactory highlighter(); 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 09fc32d46a6..66adeadcae5 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 @@ -8,7 +8,7 @@ import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; /** * The step in an aggregation definition where a filter can be set @@ -18,7 +18,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/AvgAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationFieldStep.java index cac31d11066..c85815f9c3f 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationFieldStep.java @@ -7,7 +7,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.AvgAggregationFieldReference; import org.hibernate.search.util.common.annotation.Incubating; @@ -18,7 +18,7 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ @Incubating -public interface AvgAggregationFieldStep> { +public interface AvgAggregationFieldStep> { /** * Target the given field in the avg aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationOptionsStep.java index bfc1d01cab9..562bf4feaa3 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/AvgAggregationOptionsStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -21,7 +21,7 @@ public interface AvgAggregationOptionsStep< SR, S extends AvgAggregationOptionsStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F> extends AggregationFinalStep, AggregationFilterStep { diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationFieldStep.java index dfaef44d371..a2ccf66f9f9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationFieldStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.CountAggregationFieldReference; import org.hibernate.search.util.common.annotation.Incubating; @@ -17,7 +17,7 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ @Incubating -public interface CountAggregationFieldStep> { +public interface CountAggregationFieldStep> { /** * Target the given field in the count aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationOptionsStep.java index 9b613d7c239..1e960e720f5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountAggregationOptionsStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -20,7 +20,7 @@ public interface CountAggregationOptionsStep< SR, S extends CountAggregationOptionsStep, - PDF extends SearchPredicateFactory> + PDF extends TypedSearchPredicateFactory> extends AggregationFinalStep, AggregationFilterStep { } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationFieldStep.java index cb29d9fee3a..ab189dde2b3 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationFieldStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.CountAggregationFieldReference; import org.hibernate.search.util.common.annotation.Incubating; @@ -17,7 +17,7 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ @Incubating -public interface CountDistinctAggregationFieldStep> { +public interface CountDistinctAggregationFieldStep> { /** * Target the given field in the count distinct aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationOptionsStep.java index 52744c8be00..2aca785be30 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/CountDistinctAggregationOptionsStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -20,7 +20,7 @@ public interface CountDistinctAggregationOptionsStep< SR, S extends CountDistinctAggregationOptionsStep, - PDF extends SearchPredicateFactory> + PDF extends TypedSearchPredicateFactory> extends AggregationFinalStep, AggregationFilterStep { } 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 87c1385cffe..35d76c953f1 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 @@ -6,10 +6,10 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; /** - * A base interface for subtypes of {@link SearchAggregationFactory} allowing to + * A base interface for subtypes of {@link TypedSearchAggregationFactory} allowing to * easily override the self type and predicate factory type for all relevant methods. *

* Warning: Generic parameters of this type are subject to change, @@ -22,8 +22,8 @@ public interface ExtendedSearchAggregationFactory< SR, S extends ExtendedSearchAggregationFactory, - PDF extends SearchPredicateFactory> - extends SearchAggregationFactory { + PDF extends TypedSearchPredicateFactory> + extends TypedSearchAggregationFactory { @Override S withRoot(String objectFieldPath); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationFieldStep.java index 705630ed9cf..3d2c8bf4977 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationFieldStep.java @@ -7,7 +7,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.MaxAggregationFieldReference; import org.hibernate.search.util.common.annotation.Incubating; @@ -18,7 +18,7 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ @Incubating -public interface MaxAggregationFieldStep> { +public interface MaxAggregationFieldStep> { /** * Target the given field in the min aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationOptionsStep.java index 4b6918dd3d2..8da7b0a7690 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MaxAggregationOptionsStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -21,7 +21,7 @@ public interface MaxAggregationOptionsStep< SR, S extends MaxAggregationOptionsStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F> extends AggregationFinalStep, AggregationFilterStep { diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationFieldStep.java index 60063f5432d..22e9a6991fa 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationFieldStep.java @@ -7,7 +7,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.MinAggregationFieldReference; import org.hibernate.search.util.common.annotation.Incubating; @@ -18,7 +18,7 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ @Incubating -public interface MinAggregationFieldStep> { +public interface MinAggregationFieldStep> { /** * Target the given field in the min aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationOptionsStep.java index 65a868f3b32..4e3e22c78af 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/MinAggregationOptionsStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -21,7 +21,7 @@ public interface MinAggregationOptionsStep< SR, S extends MinAggregationOptionsStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F> extends AggregationFinalStep, AggregationFilterStep { 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 9968ef35d0e..6c4c05a3a63 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 @@ -7,7 +7,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.RangeAggregationFieldReference; /** @@ -16,7 +16,7 @@ * @param Scope root type. * @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. 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 2f6cef5c793..f0a23af7110 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 @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; /** * The final step in a "range" aggregation definition, where optional parameters can be set. @@ -20,7 +20,7 @@ public interface RangeAggregationOptionsStep< SR, S extends RangeAggregationOptionsStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F, A> 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 3e04669fedd..a9ec19feda3 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 @@ -7,7 +7,7 @@ import java.util.Map; import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.data.Range; /** @@ -25,7 +25,7 @@ public interface RangeAggregationRangeMoreStep< SR, S extends RangeAggregationRangeMoreStep, N extends RangeAggregationOptionsStep, Long>>, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F> 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 2bfb337ce9b..42e99fc17dd 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 @@ -7,7 +7,7 @@ import java.util.Collection; import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.data.Range; /** @@ -21,7 +21,7 @@ public interface RangeAggregationRangeStep< SR, N extends RangeAggregationRangeMoreStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, 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 3e7f6f466c0..fe2e16dd257 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 @@ -4,10 +4,8 @@ */ package org.hibernate.search.engine.search.aggregation.dsl; -import java.util.function.Function; -import org.hibernate.search.engine.search.common.NamedValues; -import org.hibernate.search.util.common.SearchException; +import org.hibernate.search.engine.search.common.NonStaticMetamodelScope; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -36,112 +34,9 @@ * Such reference provides the information on which search capabilities the particular index field possesses, and allows switching between different * {@link org.hibernate.search.engine.search.common.ValueModel value model representations}. * - * @param Scope root type. - * * @author Emmanuel Bernard emmanuel@hibernate.org */ -public interface SearchAggregationFactory { - - /** - * Perform aggregation in range buckets. - *

- * Given a field and one or more ranges of values, - * this aggregation creates one bucket per range, - * and puts in each bucket every document for which - * the given field has a value that falls into the corresponding range. - *

- * For each bucket, the document count is computed, - * or more complex metrics or sub-aggregations for backends that support it. - * - * @return The next step. - */ - RangeAggregationFieldStep range(); - - /** - * Perform aggregation in term buckets. - *

- * Given a field, - * this aggregation creates one bucket per term of that field in the index, - * and puts in each bucket every document for which - * the given field matches the corresponding term. - *

- * For each bucket, the document count is computed, - * or more complex metrics or sub-aggregations for backends that support it. - * - * @return The next step. - */ - TermsAggregationFieldStep terms(); - - /** - * Perform the sum metric aggregation. - * - * @return The next step. - */ - @Incubating - SumAggregationFieldStep sum(); - - /** - * Perform the min metric aggregation. - * - * @return The next step. - */ - @Incubating - MinAggregationFieldStep min(); - - /** - * Perform the max metric aggregation. - * - * @return The next step. - */ - @Incubating - MaxAggregationFieldStep max(); - - /** - * Perform the count metric aggregation. - * - * @return The next step. - */ - @Incubating - CountAggregationFieldStep count(); - - /** - * Perform the count distinct metric aggregation. - * - * @return The next step. - */ - @Incubating - CountDistinctAggregationFieldStep countDistinct(); - - /** - * Perform the avg metric aggregation. - * - * @return the next step. - */ - @Incubating - AvgAggregationFieldStep avg(); - - /** - * Delegating aggregation that creates the actual aggregation at query create time and provides access to query parameters. - *

- * Which aggregation exactly to create is defined by a function passed to the arguments of this aggregation. - * - * @param aggregationCreator The function creating an actual aggregation. - * @return A final DSL step in a parameterized aggregation definition. - */ - @Incubating - AggregationFinalStep withParameters( - Function> aggregationCreator); - - /** - * Extend the current factory with the given extension, - * resulting in an extended factory offering different types of aggregations. - * - * @param extension The extension to the aggregation DSL. - * @param The type of factory provided by the extension. - * @return The extended factory. - * @throws SearchException If the extension cannot be applied (wrong underlying backend, ...). - */ - T extension(SearchAggregationFactoryExtension extension); +public interface SearchAggregationFactory extends TypedSearchAggregationFactory { /** * Create a new aggregation factory whose root for all paths passed to the DSL @@ -153,7 +48,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 c0efcede5cd..ea96421e28e 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 @@ -16,9 +16,9 @@ * * @param Scope root type. * @param The type of extended aggregation factories. Should generally extend - * {@link SearchAggregationFactory}. + * {@link TypedSearchAggregationFactory}. * - * @see SearchAggregationFactory#extension(SearchAggregationFactoryExtension) + * @see TypedSearchAggregationFactory#extension(SearchAggregationFactoryExtension) * @see ExtendedSearchAggregationFactory */ public interface SearchAggregationFactoryExtension { @@ -28,10 +28,10 @@ public interface SearchAggregationFactoryExtension { *

* WARNING: this method is not API, see comments at the type level. * - * @param original The original, non-extended {@link SearchAggregationFactory}. + * @param original The original, non-extended {@link TypedSearchAggregationFactory}. * @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(TypedSearchAggregationFactory original); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationFieldStep.java index 140eb514abd..9d7e1aba7c5 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationFieldStep.java @@ -7,7 +7,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.SumAggregationFieldReference; import org.hibernate.search.util.common.annotation.Incubating; @@ -18,7 +18,7 @@ * @param The type of factory used to create predicates in {@link AggregationFilterStep#filter(Function)}. */ @Incubating -public interface SumAggregationFieldStep> { +public interface SumAggregationFieldStep> { /** * Target the given field in the sum aggregation. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationOptionsStep.java index e4a0cb6eba2..6f37fe37d83 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/SumAggregationOptionsStep.java @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -21,7 +21,7 @@ public interface SumAggregationOptionsStep< SR, S extends SumAggregationOptionsStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F> extends AggregationFinalStep, AggregationFilterStep { 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 b3039772faf..6d4ae9fd595 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 @@ -8,7 +8,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.reference.aggregation.TermsAggregationFieldReference; /** @@ -17,7 +17,7 @@ * @param Scope root type. * @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. 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 22fbf84f1ca..eb899180394 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 @@ -6,7 +6,7 @@ import java.util.function.Function; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; /** * The final step in a "terms" aggregation definition, where optional parameters can be set. @@ -19,7 +19,7 @@ public interface TermsAggregationOptionsStep< SR, S extends TermsAggregationOptionsStep, - PDF extends SearchPredicateFactory, + PDF extends TypedSearchPredicateFactory, F, A> extends AggregationFinalStep, AggregationFilterStep { diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TypedSearchAggregationFactory.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TypedSearchAggregationFactory.java new file mode 100644 index 00000000000..16a3038d0b1 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/TypedSearchAggregationFactory.java @@ -0,0 +1,166 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.search.engine.search.aggregation.dsl; + +import java.util.function.Function; + +import org.hibernate.search.engine.search.common.NamedValues; +import org.hibernate.search.util.common.SearchException; +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * A factory for search aggregations. + * + *

Field paths

+ * + * By default, field paths passed to this DSL are interpreted as absolute, + * i.e. relative to the index root. + *

+ * However, a new, "relative" factory can be created with {@link #withRoot(String)}: + * the new factory interprets paths as relative to the object field passed as argument to the method. + *

+ * This can be useful when calling reusable methods that can apply the same aggregation + * on different object fields that have same structure (same sub-fields). + *

+ * Such a factory can also transform relative paths into absolute paths using {@link #toAbsolutePath(String)}; + * this can be useful for native aggregations in particular. + * + *

Field references

+ * + * A {@link org.hibernate.search.engine.search.reference field reference} is always represented by the absolute field path and, + * if applicable, i.e. when a field reference is typed, a combination of the {@link org.hibernate.search.engine.search.common.ValueModel} and the type. + *

+ * Field references are usually accessed from the generated Hibernate Search's static metamodel classes that describe the index structure. + * Such reference provides the information on which search capabilities the particular index field possesses, and allows switching between different + * {@link org.hibernate.search.engine.search.common.ValueModel value model representations}. + * + * @param Scope root type. + * + * @author Emmanuel Bernard emmanuel@hibernate.org + */ +public interface TypedSearchAggregationFactory { + + /** + * Perform aggregation in range buckets. + *

+ * Given a field and one or more ranges of values, + * this aggregation creates one bucket per range, + * and puts in each bucket every document for which + * the given field has a value that falls into the corresponding range. + *

+ * For each bucket, the document count is computed, + * or more complex metrics or sub-aggregations for backends that support it. + * + * @return The next step. + */ + RangeAggregationFieldStep range(); + + /** + * Perform aggregation in term buckets. + *

+ * Given a field, + * this aggregation creates one bucket per term of that field in the index, + * and puts in each bucket every document for which + * the given field matches the corresponding term. + *

+ * For each bucket, the document count is computed, + * or more complex metrics or sub-aggregations for backends that support it. + * + * @return The next step. + */ + TermsAggregationFieldStep terms(); + + /** + * Perform the sum metric aggregation. + * + * @return The next step. + */ + @Incubating + SumAggregationFieldStep sum(); + + /** + * Perform the min metric aggregation. + * + * @return The next step. + */ + @Incubating + MinAggregationFieldStep min(); + + /** + * Perform the max metric aggregation. + * + * @return The next step. + */ + @Incubating + MaxAggregationFieldStep max(); + + /** + * Perform the count metric aggregation. + * + * @return The next step. + */ + @Incubating + CountAggregationFieldStep count(); + + /** + * Perform the count distinct metric aggregation. + * + * @return The next step. + */ + @Incubating + CountDistinctAggregationFieldStep countDistinct(); + + /** + * Perform the avg metric aggregation. + * + * @return the next step. + */ + @Incubating + AvgAggregationFieldStep avg(); + + /** + * Delegating aggregation that creates the actual aggregation at query create time and provides access to query parameters. + *

+ * Which aggregation exactly to create is defined by a function passed to the arguments of this aggregation. + * + * @param aggregationCreator The function creating an actual aggregation. + * @return A final DSL step in a parameterized aggregation definition. + */ + @Incubating + AggregationFinalStep withParameters( + Function> aggregationCreator); + + /** + * Extend the current factory with the given extension, + * resulting in an extended factory offering different types of aggregations. + * + * @param extension The extension to the aggregation DSL. + * @param The type of factory provided by the extension. + * @return The extended factory. + * @throws SearchException If the extension cannot be applied (wrong underlying backend, ...). + */ + T extension(SearchAggregationFactoryExtension extension); + + /** + * Create a new aggregation factory whose root for all paths passed to the DSL + * will be the given object field. + *

+ * See here for more information. + * + * @param objectFieldPath The path from the current root to an object field that will become the new root. + * @return A new aggregation factory using the given object field as root. + */ + @Incubating + TypedSearchAggregationFactory withRoot(String objectFieldPath); + + /** + * @param relativeFieldPath The path to a field, relative to the {@link #withRoot(String) root} of this factory. + * @return The absolute path of the field, for use in native aggregations for example. + * Note the path is returned even if the field doesn't exist. + */ + @Incubating + String toAbsolutePath(String relativeFieldPath); + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationFieldStepImpl.java index e6fef4958f9..757d27634f0 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationFieldStepImpl.java @@ -10,10 +10,10 @@ import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class AvgAggregationFieldStepImpl> +public class AvgAggregationFieldStepImpl> implements AvgAggregationFieldStep { private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationOptionsStepImpl.java index f3f0107bc70..4daba642002 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/AvgAggregationOptionsStepImpl.java @@ -12,9 +12,9 @@ import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -class AvgAggregationOptionsStepImpl, F> +class AvgAggregationOptionsStepImpl, F> implements AvgAggregationOptionsStep, PDF, F> { private final FieldMetricAggregationBuilder builder; private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationFieldStepImpl.java index 40ae2f5d268..4a2ee3c98dd 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationFieldStepImpl.java @@ -9,9 +9,9 @@ import org.hibernate.search.engine.search.aggregation.dsl.spi.SearchAggregationDslContext; import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.SearchFilterableAggregationBuilder; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -public class CountAggregationFieldStepImpl> +public class CountAggregationFieldStepImpl> implements CountAggregationFieldStep { private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationOptionsStepImpl.java index 17c8d374869..58cb8bad195 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountAggregationOptionsStepImpl.java @@ -12,9 +12,9 @@ import org.hibernate.search.engine.search.aggregation.spi.SearchFilterableAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -class CountAggregationOptionsStepImpl> +class CountAggregationOptionsStepImpl> implements CountAggregationOptionsStep, PDF> { private final SearchFilterableAggregationBuilder builder; private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationFieldStepImpl.java index 239db8baf53..fd67730f29f 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationFieldStepImpl.java @@ -9,9 +9,9 @@ import org.hibernate.search.engine.search.aggregation.dsl.spi.SearchAggregationDslContext; import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.SearchFilterableAggregationBuilder; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -public class CountDistinctAggregationFieldStepImpl> +public class CountDistinctAggregationFieldStepImpl> implements CountDistinctAggregationFieldStep { private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationOptionsStepImpl.java index 9bc23a51cb2..293349b2e5a 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/CountDistinctAggregationOptionsStepImpl.java @@ -12,9 +12,9 @@ import org.hibernate.search.engine.search.aggregation.spi.SearchFilterableAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -class CountDistinctAggregationOptionsStepImpl> +class CountDistinctAggregationOptionsStepImpl> implements CountDistinctAggregationOptionsStep, PDF> { private final SearchFilterableAggregationBuilder builder; private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationFieldStepImpl.java index fc960180ff6..787f624b00e 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationFieldStepImpl.java @@ -10,10 +10,10 @@ import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class MaxAggregationFieldStepImpl> +public class MaxAggregationFieldStepImpl> implements MaxAggregationFieldStep { private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationOptionsStepImpl.java index f1b35a74b97..94be31e94fe 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MaxAggregationOptionsStepImpl.java @@ -12,9 +12,9 @@ import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -class MaxAggregationOptionsStepImpl, F> +class MaxAggregationOptionsStepImpl, F> implements MaxAggregationOptionsStep, PDF, F> { private final FieldMetricAggregationBuilder builder; private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationFieldStepImpl.java index edd21456f76..45e4503e5ec 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationFieldStepImpl.java @@ -10,10 +10,10 @@ import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class MinAggregationFieldStepImpl> +public class MinAggregationFieldStepImpl> implements MinAggregationFieldStep { private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationOptionsStepImpl.java index bcbd2a66241..6cc90fecb00 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/MinAggregationOptionsStepImpl.java @@ -12,9 +12,9 @@ import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -class MinAggregationOptionsStepImpl, F> +class MinAggregationOptionsStepImpl, F> implements MinAggregationOptionsStep, PDF, F> { private final FieldMetricAggregationBuilder builder; private final SearchAggregationDslContext dslContext; 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 f97b7f07088..dcfb149186d 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 @@ -10,10 +10,10 @@ import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.RangeAggregationBuilder; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class RangeAggregationFieldStepImpl> +public class RangeAggregationFieldStepImpl> implements RangeAggregationFieldStep { private final SearchAggregationDslContext dslContext; 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 454a6c00ac2..ff5e3c575f3 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 @@ -15,11 +15,11 @@ import org.hibernate.search.engine.search.aggregation.spi.RangeAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.data.Range; import org.hibernate.search.util.common.impl.Contracts; -class RangeAggregationRangeStepImpl, F> +class RangeAggregationRangeStepImpl, F> implements RangeAggregationRangeStep, PDF, F>, RangeAggregationRangeMoreStep, diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationFieldStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationFieldStepImpl.java index 18aa188b708..d1a2e04387f 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationFieldStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationFieldStepImpl.java @@ -10,10 +10,10 @@ import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class SumAggregationFieldStepImpl> +public class SumAggregationFieldStepImpl> implements SumAggregationFieldStep { private final SearchAggregationDslContext dslContext; diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationOptionsStepImpl.java index 7c3ef7bca3e..ccdbf14d258 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/impl/SumAggregationOptionsStepImpl.java @@ -12,9 +12,9 @@ import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; -class SumAggregationOptionsStepImpl, F> +class SumAggregationOptionsStepImpl, F> implements SumAggregationOptionsStep, PDF, F> { private final FieldMetricAggregationBuilder builder; private final SearchAggregationDslContext dslContext; 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 a0d735b13fa..6f4d7ac29af 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 @@ -12,10 +12,10 @@ import org.hibernate.search.engine.search.aggregation.spi.AggregationTypeKeys; import org.hibernate.search.engine.search.aggregation.spi.TermsAggregationBuilder; import org.hibernate.search.engine.search.common.ValueModel; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -public class TermsAggregationFieldStepImpl> +public class TermsAggregationFieldStepImpl> implements TermsAggregationFieldStep { private final SearchAggregationDslContext dslContext; 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 e0ddea57e2f..687a58cb583 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 @@ -13,10 +13,10 @@ import org.hibernate.search.engine.search.aggregation.spi.TermsAggregationBuilder; import org.hibernate.search.engine.search.predicate.SearchPredicate; import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.impl.Contracts; -class TermsAggregationOptionsStepImpl, F> +class TermsAggregationOptionsStepImpl, F> implements TermsAggregationOptionsStep, PDF, F, Map> { private final TermsAggregationBuilder builder; private final SearchAggregationDslContext dslContext; 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 ad14244c2f6..d0c71cfa809 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 @@ -29,13 +29,13 @@ import org.hibernate.search.engine.search.aggregation.dsl.impl.WithParametersAggregationFinalStep; import org.hibernate.search.engine.search.aggregation.spi.SearchAggregationIndexScope; import org.hibernate.search.engine.search.common.NamedValues; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; public abstract class AbstractSearchAggregationFactory< SR, S extends ExtendedSearchAggregationFactory, SC extends SearchAggregationIndexScope, - PDF extends SearchPredicateFactory> + PDF extends TypedSearchPredicateFactory> implements ExtendedSearchAggregationFactory { protected final SearchAggregationDslContext 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 aaff67aded2..e969ad1e87c 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 @@ -7,7 +7,7 @@ import java.util.function.Function; import org.hibernate.search.engine.search.aggregation.spi.SearchAggregationIndexScope; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.engine.search.sort.dsl.FieldSortOptionsStep; /** @@ -21,11 +21,11 @@ public class SearchAggregationDslContext< SR, SC extends SearchAggregationIndexScope, - PDF extends SearchPredicateFactory> { + PDF extends TypedSearchPredicateFactory> { public static < SR, SC extends SearchAggregationIndexScope, - PDF extends SearchPredicateFactory> SearchAggregationDslContext root(SC scope, + PDF extends TypedSearchPredicateFactory> SearchAggregationDslContext root(SC scope, PDF predicateFactory) { return new SearchAggregationDslContext<>( scope, predicateFactory ); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationFactoryDelegate.java b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationFactoryDelegate.java new file mode 100644 index 00000000000..f2ffb44101e --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/aggregation/dsl/spi/SearchAggregationFactoryDelegate.java @@ -0,0 +1,88 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.search.engine.search.aggregation.dsl.spi; + +import java.util.function.Function; + +import org.hibernate.search.engine.search.aggregation.dsl.AggregationFinalStep; +import org.hibernate.search.engine.search.aggregation.dsl.AvgAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.CountAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.CountDistinctAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.MaxAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.MinAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.RangeAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory; +import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactoryExtension; +import org.hibernate.search.engine.search.aggregation.dsl.SumAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.TermsAggregationFieldStep; +import org.hibernate.search.engine.search.aggregation.dsl.TypedSearchAggregationFactory; +import org.hibernate.search.engine.search.common.NamedValues; +import org.hibernate.search.engine.search.common.NonStaticMetamodelScope; +import org.hibernate.search.util.common.annotation.Incubating; + +@Incubating +public record SearchAggregationFactoryDelegate(TypedSearchAggregationFactory delegate) + implements SearchAggregationFactory { + @Override + public RangeAggregationFieldStep range() { + return delegate.range(); + } + + @Override + public TermsAggregationFieldStep terms() { + return delegate.terms(); + } + + @Override + public SumAggregationFieldStep sum() { + return delegate.sum(); + } + + @Override + public MinAggregationFieldStep min() { + return delegate().min(); + } + + @Override + public MaxAggregationFieldStep max() { + return delegate.max(); + } + + @Override + public CountAggregationFieldStep count() { + return delegate.count(); + } + + @Override + public CountDistinctAggregationFieldStep countDistinct() { + return delegate.countDistinct(); + } + + @Override + public AvgAggregationFieldStep avg() { + return delegate.avg(); + } + + @Override + public AggregationFinalStep withParameters( + Function> aggregationCreator) { + return delegate.withParameters( aggregationCreator ); + } + + @Override + public T extension(SearchAggregationFactoryExtension extension) { + return delegate.extension( extension ); + } + + @Override + public SearchAggregationFactory withRoot(String objectFieldPath) { + return new SearchAggregationFactoryDelegate( delegate.withRoot( objectFieldPath ) ); + } + + @Override + public String toAbsolutePath(String relativeFieldPath) { + return delegate.toAbsolutePath( relativeFieldPath ); + } +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/common/NonStaticMetamodelScope.java b/engine/src/main/java/org/hibernate/search/engine/search/common/NonStaticMetamodelScope.java new file mode 100644 index 00000000000..50527531664 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/common/NonStaticMetamodelScope.java @@ -0,0 +1,14 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.search.engine.search.common; + +import org.hibernate.search.util.common.annotation.Incubating; + +/** + * The default root scope, to be used when there is no static metamodel involvied. + */ +@Incubating +public final class NonStaticMetamodelScope { +} 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 421aee77969..47455b72caf 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 @@ -5,7 +5,7 @@ package org.hibernate.search.engine.search.predicate.definition; import org.hibernate.search.engine.search.predicate.SearchPredicate; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -25,7 +25,7 @@ public interface PredicateDefinition { /** * Creates a predicate. - * @param context The context, exposing in particular a {@link SearchPredicateFactory}. + * @param context The context, exposing in particular a {@link TypedSearchPredicateFactory}. * @return The created {@link SearchPredicate}. */ 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 2992f94043d..9f7400a6869 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 @@ -8,7 +8,7 @@ import org.hibernate.search.engine.search.common.NamedValues; import org.hibernate.search.engine.search.predicate.dsl.NamedPredicateOptionsStep; -import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; +import org.hibernate.search.engine.search.predicate.dsl.TypedSearchPredicateFactory; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.annotation.Incubating; @@ -26,9 +26,9 @@ public interface PredicateDefinitionContext { * this factory expects field paths to be provided relative to that same object field. * This factory is only valid in the present context and must not be used after * {@link PredicateDefinition#create(PredicateDefinitionContext)} returns. - * @see SearchPredicateFactory + * @see TypedSearchPredicateFactory */ - SearchPredicateFactory predicate(); + TypedSearchPredicateFactory predicate(); /** * @param name The name of the parameter. diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/BooleanPredicateOptionsCollector.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/BooleanPredicateOptionsCollector.java index 1f2c3c00031..78a9a476443 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/BooleanPredicateOptionsCollector.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/BooleanPredicateOptionsCollector.java @@ -10,7 +10,7 @@ import org.hibernate.search.engine.search.predicate.SearchPredicate; /** - * An object where the clauses and options of a {@link SearchPredicateFactory#bool() boolean predicate} can be set. + * An object where the clauses and options of a {@link TypedSearchPredicateFactory#bool() boolean predicate} can be set. *

* Different types of clauses have different effects, see below. * @@ -167,7 +167,7 @@ default S filter(PredicateFinalStep dslFinalStep) { * Should generally be a lambda expression. * @return {@code this}, for method chaining. */ - S must(Function, ? extends PredicateFinalStep> clauseContributor); + S must(Function, ? extends PredicateFinalStep> clauseContributor); /** * Add a "must not" clause to be defined by the given function. @@ -179,7 +179,7 @@ default S filter(PredicateFinalStep dslFinalStep) { * Should generally be a lambda expression. * @return {@code this}, for method chaining. */ - S mustNot(Function, ? extends PredicateFinalStep> clauseContributor); + S mustNot(Function, ? extends PredicateFinalStep> clauseContributor); /** * Add a "should" clause to be defined by the given function. @@ -191,7 +191,7 @@ default S filter(PredicateFinalStep dslFinalStep) { * Should generally be a lambda expression. * @return {@code this}, for method chaining. */ - S should(Function, ? extends PredicateFinalStep> clauseContributor); + S should(Function, ? extends PredicateFinalStep> clauseContributor); /** * Add a "filter" clause to be defined by the given function. @@ -203,7 +203,7 @@ default S filter(PredicateFinalStep dslFinalStep) { * Should generally be a lambda expression. * @return {@code this}, for method chaining. */ - S filter(Function, ? extends PredicateFinalStep> clauseContributor); + S filter(Function, ? extends PredicateFinalStep> clauseContributor); /** * Checks if this predicate contains at least one clause. 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 111ee223fc6..cbe87594957 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 @@ -5,7 +5,7 @@ package org.hibernate.search.engine.search.predicate.dsl; /** - * A base interface for subtypes of {@link SearchPredicateFactory} allowing to + * A base interface for subtypes of {@link TypedSearchPredicateFactory} allowing to * easily override the self type for all relevant methods. *

* Warning: Generic parameters of this type are subject to change, @@ -15,7 +15,7 @@ * @param The self type, i.e. the exposed type of this factory. */ public interface ExtendedSearchPredicateFactory> - extends SearchPredicateFactory { + extends TypedSearchPredicateFactory { @Override S withRoot(String objectFieldPath); diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericBooleanPredicateClausesStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericBooleanPredicateClausesStep.java index e7f6a93e6ee..3b089058346 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericBooleanPredicateClausesStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericBooleanPredicateClausesStep.java @@ -62,16 +62,16 @@ default S filter(PredicateFinalStep dslFinalStep) { } @Override - S must(Function, ? extends PredicateFinalStep> clauseContributor); + S must(Function, ? extends PredicateFinalStep> clauseContributor); @Override - S mustNot(Function, ? extends PredicateFinalStep> clauseContributor); + S mustNot(Function, ? extends PredicateFinalStep> clauseContributor); @Override - S should(Function, ? extends PredicateFinalStep> clauseContributor); + S should(Function, ? extends PredicateFinalStep> clauseContributor); @Override - S filter(Function, ? extends PredicateFinalStep> clauseContributor); + S filter(Function, ? extends PredicateFinalStep> clauseContributor); @Override default S minimumShouldMatchNumber(int matchingClausesNumber) { diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericSimpleBooleanPredicateClausesStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericSimpleBooleanPredicateClausesStep.java index 4255dd5e7dc..0da8349e8e2 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericSimpleBooleanPredicateClausesStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/GenericSimpleBooleanPredicateClausesStep.java @@ -33,7 +33,7 @@ default S add(PredicateFinalStep searchPredicate) { S add(SearchPredicate searchPredicate); @Override - S add(Function, ? extends PredicateFinalStep> clauseContributor); + S add(Function, ? extends PredicateFinalStep> clauseContributor); @Override S with(Consumer contributor); 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 549672973e0..4c1eef1a5c9 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 @@ -22,7 +22,7 @@ default KnnPredicateOptionsStep filter(PredicateFinalStep searchPredicate) { } KnnPredicateOptionsStep filter( - Function, ? extends PredicateFinalStep> clauseContributor); + Function, ? extends PredicateFinalStep> clauseContributor); /** * @param similarity A similarity limit: documents with vectors distance to which, according to the configured similarity function, diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchAllPredicateOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchAllPredicateOptionsStep.java index fa672272cf5..ee5144b93da 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchAllPredicateOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/MatchAllPredicateOptionsStep.java @@ -61,6 +61,6 @@ default S except(PredicateFinalStep dslFinalStep) { * Should generally be a lambda expression. * @return {@code this}, for method chaining. */ - S except(Function, ? extends PredicateFinalStep> clauseContributor); + S except(Function, ? extends PredicateFinalStep> clauseContributor); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesCollector.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesCollector.java index 03912dc4ec0..d91d0ea5bf7 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesCollector.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesCollector.java @@ -6,10 +6,10 @@ /** * An object where the clauses - * of a {@link SearchPredicateFactory#nested(String) nested predicate} can be set. + * of a {@link TypedSearchPredicateFactory#nested(String) nested predicate} can be set. *

* The resulting nested predicate must match all inner clauses, - * similarly to an {@link SearchPredicateFactory#and() "and" predicate}. + * similarly to an {@link TypedSearchPredicateFactory#and() "and" predicate}. * * @param Scope root type. */ diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesStep.java index af61eb2b7de..4e66dee9b5c 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateClausesStep.java @@ -9,7 +9,7 @@ * clauses can be added. *

* The resulting nested predicate must match all inner clauses, - * similarly to an {@link SearchPredicateFactory#and() "and" predicate}. + * similarly to an {@link TypedSearchPredicateFactory#and() "and" predicate}. * * @param Scope root type. * @param The "self" type (the actual exposed type of this step). diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateFieldStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateFieldStep.java index cda439347be..914e48bed10 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateFieldStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateFieldStep.java @@ -12,7 +12,7 @@ * * @param Scope root type. * @param The type of the next step. - * @deprecated Use {@link SearchPredicateFactory#nested(String)} instead. + * @deprecated Use {@link TypedSearchPredicateFactory#nested(String)} instead. */ @Deprecated(since = "6.2") public interface NestedPredicateFieldStep> { diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateNestStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateNestStep.java index 42d5927f5e8..4184e058db4 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateNestStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateNestStep.java @@ -12,7 +12,7 @@ * The step in a "nested" predicate definition where the predicate to nest can be set. * * @param The type of the next step. - * @deprecated Use {@link SearchPredicateFactory#nested(String)} instead. + * @deprecated Use {@link TypedSearchPredicateFactory#nested(String)} instead. */ @Deprecated(since = "6.2") public interface NestedPredicateNestStep> { @@ -65,6 +65,6 @@ default N nest(PredicateFinalStep dslFinalStep) { * Should generally be a lambda expression. * @return The next step. */ - N nest(Function, ? extends PredicateFinalStep> predicateContributor); + N nest(Function, ? extends PredicateFinalStep> predicateContributor); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateOptionsStep.java index 565b1bfec00..ca4881f67b0 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/NestedPredicateOptionsStep.java @@ -8,7 +8,7 @@ * The final step in an "nested" predicate definition, where optional parameters can be set. * * @param The "self" type (the actual exposed type of this step). - * @deprecated Use {@link SearchPredicateFactory#nested(String)} instead. + * @deprecated Use {@link TypedSearchPredicateFactory#nested(String)} instead. */ @Deprecated(since = "6.2") public interface NestedPredicateOptionsStep> 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 2e29a4c24c5..cfcbf4fc1b6 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 @@ -4,15 +4,7 @@ */ package org.hibernate.search.engine.search.predicate.dsl; -import java.util.function.Consumer; -import java.util.function.Function; - -import org.hibernate.search.engine.backend.types.ObjectStructure; -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.predicate.NestedPredicateFieldReference; -import org.hibernate.search.util.common.SearchException; +import org.hibernate.search.engine.search.common.NonStaticMetamodelScope; import org.hibernate.search.util.common.annotation.Incubating; /** @@ -43,333 +35,8 @@ * Such reference provides the information on which search capabilities the particular index field possesses, and allows switching between different * {@link org.hibernate.search.engine.search.common.ValueModel value model representations}. * - * @param Scope root type. */ -public interface SearchPredicateFactory { - - /** - * Match all documents. - * - * @return The initial step of a DSL where the "match all" predicate can be defined. - * @see MatchAllPredicateOptionsStep - */ - MatchAllPredicateOptionsStep matchAll(); - - /** - * Match none of the documents. - * - * @return The initial step of a DSL where the "match none" predicate can be defined. - * @see MatchNonePredicateFinalStep - */ - MatchNonePredicateFinalStep matchNone(); - - /** - * Match documents where the identifier is among the given values. - * - * @return The initial step of a DSL allowing the definition of an "id" predicate. - * @see MatchIdPredicateMatchingStep - */ - MatchIdPredicateMatchingStep id(); - - /** - * Match documents if they match a combination of boolean clauses. - * - * @return The initial step of a DSL where the "boolean" predicate can be defined. - * @see BooleanPredicateClausesStep - */ - BooleanPredicateClausesStep bool(); - - /** - * Match documents if they match a combination of boolean clauses, - * which will be defined by the given consumer. - *

- * Best used with lambda expressions. - * - * @param clauseContributor A consumer that will add clauses to the step passed in parameter. - * Should generally be a lambda expression. - * @return The final step of the boolean predicate definition. - * @deprecated Use {@code .bool().with(...)} instead. - * @see BooleanPredicateClausesStep#with(Consumer) - */ - @Deprecated(since = "6.2") - PredicateFinalStep bool(Consumer> clauseContributor); - - /** - * Match documents if they match all inner clauses. - * - * @return The initial step of a DSL where predicates that must match can be added and options can be set. - * @see GenericSimpleBooleanPredicateClausesStep - */ - SimpleBooleanPredicateClausesStep and(); - - /** - * Match documents if they match all previously-built {@link SearchPredicate}. - * - * @return The step of a DSL where options can be set. - */ - SimpleBooleanPredicateOptionsStep and( - SearchPredicate firstSearchPredicate, - SearchPredicate... otherSearchPredicates); - - /** - * Match documents if they match all clauses. - * - * @return The step of a DSL where options can be set. - */ - SimpleBooleanPredicateOptionsStep and(PredicateFinalStep firstSearchPredicate, - PredicateFinalStep... otherSearchPredicates); - - /** - * Match documents if they match any inner clause. - * - * @return The initial step of a DSL where predicates that should match can be added and options can be set. - * @see GenericSimpleBooleanPredicateClausesStep - */ - SimpleBooleanPredicateClausesStep or(); - - /** - * Match documents if they match any previously-built {@link SearchPredicate}. - * - * @return The step of a DSL where options can be set. - */ - SimpleBooleanPredicateOptionsStep or(SearchPredicate firstSearchPredicate, - SearchPredicate... otherSearchPredicates); - - /** - * Match documents if they match any clause. - * - * @return The step of a DSL where options can be set. - */ - SimpleBooleanPredicateOptionsStep or(PredicateFinalStep firstSearchPredicate, - PredicateFinalStep... otherSearchPredicates); - - /** - * Match documents that do not satisfy the passed in previously-built {@link SearchPredicate}. - *

- * Can be used to negate a predicate. - * - * @return The initial and final step of a DSL where the "not" predicate can be defined. - * @see NotPredicateFinalStep - */ - NotPredicateFinalStep not(SearchPredicate searchPredicate); - - /** - * Match documents that do not satisfy the passed in predicate. - *

- * Can be used to negate a predicate. - * - * @return The initial and final step of a DSL where the "not" predicate can be defined. - * @see NotPredicateFinalStep - */ - NotPredicateFinalStep not(PredicateFinalStep searchPredicate); - - /** - * Match documents where targeted fields have a value that "matches" a given single value. - *

- * Note that "value matching" may be exact or approximate depending on the type of the targeted fields: - * numeric fields in particular imply exact matches, - * while analyzed, full-text fields imply approximate matches depending on how they are analyzed. - * - * @return The initial step of a DSL where the "match" predicate can be defined. - * @see MatchPredicateFieldStep - */ - MatchPredicateFieldStep match(); - - /** - * Match documents where targeted fields have a value within lower and upper bounds. - * - * @return The initial step of a DSL where the "range" predicate can be defined. - * @see RangePredicateFieldStep - */ - RangePredicateFieldStep range(); - - /** - * Match documents where targeted fields have a value that contains a given phrase. - * - * @return The initial step of a DSL where the "phrase" predicate can be defined. - * @see PhrasePredicateFieldStep - */ - PhrasePredicateFieldStep phrase(); - - /** - * Match documents where targeted fields contain a term that matches a given pattern, - * such as {@code inter*on} or {@code pa?t}. - *

- * Note that such patterns are not analyzed, - * thus any character that is not a wildcard must match exactly the content of the index - * (including uppercase letters, diacritics, ...). - * - * @return The initial step of a DSL where the "wildcard" predicate can be defined. - * @see WildcardPredicateFieldStep - */ - WildcardPredicateFieldStep wildcard(); - - /** - * Match documents where targeted fields have a value that starts with a given string. - * - * @return The initial step of a DSL where the "prefix" predicate can be defined. - * @see PrefixPredicateFieldStep - */ - PrefixPredicateFieldStep prefix(); - - /** - * Match documents where targeted fields contain a term that matches a given regular expression. - * - * @return The initial step of a DSL where the "regexp" predicate can be defined. - * @see RegexpPredicateFieldStep - */ - RegexpPredicateFieldStep regexp(); - - /** - * Match documents where targeted fields contain a term that matches some terms of a given series of terms. - * - * @return The initial step of a DSL where the "terms" predicate can be defined. - * @see TermsPredicateFieldStep - */ - TermsPredicateFieldStep terms(); - - /** - * Match documents where a {@link ObjectStructure#NESTED nested object} matches a given predicate. - * - * @return The initial step of a DSL where the "nested" predicate can be defined. - * @see NestedPredicateFieldStep - * @deprecated Use {@link #nested(String)} instead. - */ - @Deprecated(since = "6.2") - NestedPredicateFieldStep nested(); - - /** - * 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 objectFieldPath The path to the (nested) object field that must match. - * @return The initial step of a DSL where the "nested" predicate can be defined. - * @see NestedPredicateFieldStep - */ - 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 fieldReference The field reference representing a definition of 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(NestedPredicateFieldReference fieldReference) { - return nested( fieldReference.absolutePath() ); - } - - /** - * Match documents according to a given query string, - * with a simple query language adapted to end users. - *

- * Note that by default, unless the query string contains explicit operators, - * documents will match if any term mentioned in the query string is present in the document (OR operator). - * This makes sense when sorting results by relevance, but is not ideal otherwise. - * See {@link SimpleQueryStringPredicateOptionsStep#defaultOperator(BooleanOperator)} to change this behavior. - * - * @return The initial step of a DSL where the "simple query string" predicate can be defined. - * @see SimpleQueryStringPredicateFieldStep - */ - SimpleQueryStringPredicateFieldStep simpleQueryString(); - - /** - * Match documents according to a given query string, - * using the Lucene's query language. - *

- * Note that by default, unless the query string contains explicit operators, - * documents will match if any term mentioned in the query string is present in the document (OR operator). - * This makes sense when sorting results by relevance, but is not ideal otherwise. - * See {@link QueryStringPredicateOptionsStep#defaultOperator(BooleanOperator)} to change this behavior. - * - * @return The initial step of a DSL where the "query string" predicate can be defined. - * @see QueryStringPredicateFieldStep - */ - QueryStringPredicateFieldStep queryString(); - - /** - * Match documents where a given field exists. - *

- * Fields are considered to exist in a document when they have at least one non-null value in this document. - * - * @return The initial step of a DSL where the "exists" predicate can be defined. - * @see ExistsPredicateFieldStep - */ - ExistsPredicateFieldStep exists(); - - /** - * Access the different types of spatial predicates. - * - * @return The initial step of a DSL where spatial predicates can be defined. - * @see SpatialPredicateInitialStep - */ - SpatialPredicateInitialStep spatial(); - - /** - * Match documents if they match a combination of defined named predicate clauses. - * - * @param path The path to the named predicate, - * formatted as {@code .}, - * or just {@code } if the predicate was declared at the root. - * @return The initial step of a DSL where named predicate predicates can be defined. - * @see NamedPredicateOptionsStep - */ - @Incubating - NamedPredicateOptionsStep named(String path); - - /** - * Match {@code k} documents whose vector field value is nearest to the given vector. - *

- * "knn" stands for "K-Nearest Neighbors"; it is a form of vector search. - * - * @param k The number of nearest neighbors to look for. - * @return The initial step of a DSL where knn predicate options can be defined. - * @see KnnPredicateVectorStep - * @see KnnPredicateOptionsStep - */ - KnnPredicateFieldStep knn(int k); - - /** - * Delegating predicate that creates the actual predicate at query create time and provides access to query parameters. - *

- * Which predicate exactly to create is defined by a function passed to the arguments of this predicate. - * - * @param predicateCreator The function defining an actual predicate to apply. - * @return A final DSL step in a parameterized predicate definition. - */ - @Incubating - PredicateFinalStep withParameters( - Function predicateCreator); - - /** - * Extend the current factory with the given extension, - * resulting in an extended factory offering different types of predicates. - * - * @param extension The extension to the predicate DSL. - * @param The type of factory provided by the extension. - * @return The extended factory. - * @throws SearchException If the extension cannot be applied (wrong underlying backend, ...). - */ - T extension(SearchPredicateFactoryExtension extension); - - /** - * Create a DSL step allowing multiple attempts to apply extensions one after the other, - * failing only if none of the extensions is supported. - *

- * If you only need to apply a single extension and fail if it is not supported, - * use the simpler {@link #extension(SearchPredicateFactoryExtension)} method instead. - * - * @return A DSL step. - */ - SearchPredicateFactoryExtensionIfSupportedStep extension(); +public interface SearchPredicateFactory extends TypedSearchPredicateFactory { /** * Create a new predicate factory whose root for all paths passed to the DSL @@ -381,15 +48,8 @@ PredicateFinalStep withParameters( * @param objectFieldPath The path from the current root to an object field that will become the new root. * @return A new predicate factory using the given object field as root. */ + @Override @Incubating - SearchPredicateFactory withRoot(String objectFieldPath); - - /** - * @param relativeFieldPath The path to a field, relative to the {@link #withRoot(String) root} of this factory. - * @return The absolute path of the field, for use in native predicates for example. - * Note the path is returned even if the field doesn't exist. - */ - @Incubating - String toAbsolutePath(String relativeFieldPath); + SearchPredicateFactory withRoot(String objectFieldPath); } 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 77ee8c42cd6..f267b9942ab 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 @@ -15,9 +15,9 @@ * and pass it to another API. * * @param The type of extended predicate factories. Should generally extend - * {@link SearchPredicateFactory}. + * {@link TypedSearchPredicateFactory}. * - * @see SearchPredicateFactory#extension(SearchPredicateFactoryExtension) + * @see TypedSearchPredicateFactory#extension(SearchPredicateFactoryExtension) * @see ExtendedSearchPredicateFactory */ public interface SearchPredicateFactoryExtension { @@ -27,10 +27,10 @@ public interface SearchPredicateFactoryExtension { *

* WARNING: this method is not API, see comments at the type level. * - * @param original The original, non-extended {@link SearchPredicateFactory}. + * @param original The original, non-extended {@link TypedSearchPredicateFactory}. * @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(TypedSearchPredicateFactory original); } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedMoreStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedMoreStep.java index 52a14e107b2..3c4153537af 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedMoreStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedMoreStep.java @@ -10,16 +10,16 @@ /** * The second and later step when attempting to apply multiple extensions - * to a {@link SearchPredicateFactory}. + * to a {@link TypedSearchPredicateFactory}. * - * @see SearchPredicateFactory#extension() + * @see TypedSearchPredicateFactory#extension() */ public interface SearchPredicateFactoryExtensionIfSupportedMoreStep extends SearchPredicateFactoryExtensionIfSupportedStep { /** * If no extension passed to {@link #ifSupported(SearchPredicateFactoryExtension, Function)} - * was supported so far, apply the given consumer to the current (non-extended) {@link SearchPredicateFactory}; + * was supported so far, apply the given consumer to the current (non-extended) {@link TypedSearchPredicateFactory}; * otherwise return the predicate created in the first succeeding {@code ifSupported} call. * * @param predicateContributor A function called if no extension was successfully applied; @@ -29,7 +29,7 @@ public interface SearchPredicateFactoryExtensionIfSupportedMoreStep * @return The final step in the DSL of the resulting predicate. */ PredicateFinalStep orElse( - Function, ? extends PredicateFinalStep> predicateContributor); + Function, ? extends PredicateFinalStep> predicateContributor); /** * If no extension passed to {@link #ifSupported(SearchPredicateFactoryExtension, Function)} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedStep.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedStep.java index ecbc144c4ee..f22320a88f9 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SearchPredicateFactoryExtensionIfSupportedStep.java @@ -8,9 +8,9 @@ /** * The initial step when attempting to apply multiple extensions - * to a {@link SearchPredicateFactory}. + * to a {@link TypedSearchPredicateFactory}. * - * @see SearchPredicateFactory#extension() + * @see TypedSearchPredicateFactory#extension() */ public interface SearchPredicateFactoryExtensionIfSupportedStep { diff --git a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SimpleBooleanPredicateClausesCollector.java b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SimpleBooleanPredicateClausesCollector.java index ff1ffd83bc0..3be391cd940 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SimpleBooleanPredicateClausesCollector.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/predicate/dsl/SimpleBooleanPredicateClausesCollector.java @@ -12,7 +12,7 @@ /** * An object where the clauses and options of a simple boolean predicate - * ({@link SearchPredicateFactory#and() and}, {@link SearchPredicateFactory#or() or}) + * ({@link TypedSearchPredicateFactory#and() and}, {@link TypedSearchPredicateFactory#or() or}) * can be set. * *

Clauses

@@ -22,15 +22,15 @@ * or any clause: *