diff --git a/documentation/src/main/asciidoc/migration/index.asciidoc b/documentation/src/main/asciidoc/migration/index.asciidoc index 48bfa2f400b..474b4547a16 100644 --- a/documentation/src/main/asciidoc/migration/index.asciidoc +++ b/documentation/src/main/asciidoc/migration/index.asciidoc @@ -207,6 +207,7 @@ In Hibernate Search 6, constants are provided through classes whose name ends wi * `org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings` * `org.hibernate.search.backend.elasticsearch.cfg.ElasticsearchBackendSettings` * `org.hibernate.search.backend.elasticsearch.cfg.ElasticsearchIndexSettings` +* `org.hibernate.search.backend.elasticsearch.aws.cfg.ElasticsearchAwsBackendSettings` [[configuration-property-reference]] === [[_configuration_property_reference]] Configuration property reference @@ -240,6 +241,30 @@ Hibernate Search 6 will automatically turn entities to documents and hold documents in memory until the transaction commit. + See also link:{hibernateSearchDocUrl}#mapper-orm-indexing-manual[this section of the documentation]. +`hibernate.search.default.elasticsearch.aws.*`:: +The syntax for configuring AWS authentication changed slightly in Hibernate Search 6. ++ +In short, the following configuration in Hibernate Search 5: +[source] +---- +hibernate.search.default.elasticsearch.aws.signing.enabled = true +hibernate.search.default.elasticsearch.aws.region = us-east-1 +hibernate.search.default.elasticsearch.aws.access_key = AKIDEXAMPLE +hibernate.search.default.elasticsearch.aws.secret_key = wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY +---- ++ +Will look like this in Hibernate Search 6: +[source] +---- +hibernate.search.backend.aws.signing.enabled = true +hibernate.search.backend.aws.region = us-east-1 +hibernate.search.backend.aws.credentials.type = static +hibernate.search.backend.aws.credentials.access_key_id = AKIDEXAMPLE +hibernate.search.backend.aws.credentials.secret_access_key = wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY +---- ++ +Other types of credentials are available in Hibernate Search 6, +see link:{hibernateSearchDocUrl}#backend-elasticsearch-configuration-aws[this section of the documentation] `hibernate.search.default.elasticsearch.connection_timeout`:: Hibernate Search 6 equivalent: `hibernate.search.backend.connection_timeout`. + @@ -1964,7 +1989,7 @@ As to migrating existing complex queries, let's consider the query below: [source, JAVA] ---- -MySearchParameters params = ...; +MySearchParameters searchParameters = ...; FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager( em ); QueryBuilder qb = fullTextEntityManager.getSearchFactory() .buildQueryBuilder().forEntity( Book.class ).get(); @@ -1978,14 +2003,18 @@ if ( searchParameters.getSearchTerms() != null ) { .matching( searchParameters.getSearchTerms() ) .createQuery() ); } -if ( searchParameters.getGenre() != null ) { - junction.must( qb.keyword().onField( "genre" ) - .matching( searchParameters.getGenre() ) ); -} if ( searchParameters.getMaxBookLength() != null ) { junction.must( qb.range().onField( "pageCount" ) .below( searchParameters.getMaxBookLength() ) ); } +if ( !searchParameters.getGenres().isEmpty() ) { + BooleanJunction junction2 = qb.bool(); + for ( Genre genre : searchParameters.getGenres() ) { + junction2.should( qb.keyword().onField( "genre" ) + .matching( genre ) ); + } + junction.must( junction2.createQuery() ); +} org.apache.lucene.search.Query luceneQuery = junction.createQuery(); @@ -2000,7 +2029,7 @@ It would look like this in Hibernate Search 6: [source, JAVA] ---- -MySearchParameters params = ...; +MySearchParameters searchParameters = ...; SearchSession session = Search.session( entityManager ); List hits = searchSession.search( Book.class ) .where( f -> f.bool( b -> { @@ -2010,23 +2039,28 @@ List hits = searchSession.search( Book.class ) .matching( searchParameters.getSearchTerms() ) .defaultOperator( BooleanOperator.AND ) ); } - if ( searchParameters.getGenre() != null ) { - b.must( f.match().field( "genre" ) - .matching( searchParameters.getGenre() ) ); - } if ( searchParameters.getMaxBookLength() != null ) { b.must( f.range().field( "pageCount" ) .atMost( searchParameters.getMaxBookLength() ) ); } + if ( !searchParameters.getGenres().isEmpty() ) { + b.must( f.bool( b2 -> { + for ( Genre genre : searchParameters.getGenres() ) { + b2.should( f.match().field( "genre" ) + .matching( genre ) ); + } + } ) ); + } } ) ) - .fetchHits( params.getPageIndex() * params.getPageSize(), params.getPageSize() ); + .fetchHits( searchParameters.getPageIndex() * searchParameters.getPageSize(), + searchParameters.getPageSize() ); ---- Alternatively, if for some reasons predicate objects are necessary: [source, JAVA] ---- -MySearchParameters params = ...; +MySearchParameters searchParameters = ...; SearchSession session = Search.session( entityManager ); SearchPredicateFactory pf = session.scope( Book.class ).predicate(); List predicates = new ArrayList<>(); @@ -2037,25 +2071,32 @@ if ( searchParameters.getSearchTerms() != null ) { .defaultOperator( BooleanOperator.AND ) .toPredicate() ); } -if ( searchParameters.getGenre() != null ) { - predicates.add( pf.match().field( "genre" ) - .matching( searchParameters.getGenre() ) - .toPredicate() ); -} if ( searchParameters.getMaxBookLength() != null ) { predicates.add( pf.range().field( "pageCount" ) .atMost( searchParameters.getMaxBookLength() ) .toPredicate() ); } +if ( !searchParameters.getGenres().isEmpty() ) { + predicates.add( f.bool( b -> { + for ( Genre genre : searchParameters.getGenres() ) { + b.should( f.match().field( "genre" ) + .matching( genre ) ); + } + } ) + .toPredicate() ); +} + +SearchPredicate topLevelPredicate = pf.bool( b -> { + b.must( f.matchAll() ); + for ( SearchPredicate predicate : predicates ) { + b.must( predicate ); + } +} ); List hits = searchSession.search( Book.class ) - .where( f -> f.bool( b -> { - b.must( f.matchAll() ); - for ( SearchPredicate predicate : predicates ) { - b.must( predicate ); - } - } ) - .fetchHits( params.getPageIndex() * params.getPageSize(), params.getPageSize() ); + .where( topLevelPredicate ) + .fetchHits( searchParameters.getPageIndex() * searchParameters.getPageSize(), + searchParameters.getPageSize() ); ---- [[queries-reference]]