We just published Hibernate Search 6.0.0.Beta5.
This release mainly changes the way the Elasticsearch backend accesses indexes, introduces delayed commits and near-real-time queries for the Lucene backend, and renames a few methods in the Search DSL. It also includes upgrades to Lucene 8.4, Elasticsearch 7.6 and Hibernate ORM 5.4.12.Final.
Getting started with Hibernate Search 6
If you want to dive right into the new, shiny Hibernate Search 6, a good starting point is the getting started guide included in the reference documentation.
Hibernate Search 6 APIs differ significantly from Search 5. For more information about migration and what we intend to do to help you, see the migration guide. |
What’s new
Aliases for Elasticsearch indexes
As of HSEARCH-3791,
Elasticsearch indexes are now accessed through aliases only.
Hibernate Search relies on two aliases for each index: one for writes (<myindex>-write
) and one for reads (<myindex>-read
).
This setup is a first step towards introducing, in a future version of Hibernate Search, a "zero-downtime" reindexing where search queries still return results while reindexing. See this section of the reference documentation for more information, in particular regarding how to change the name of the aliases.
As a result of this change, you will need to either:
-
manually create the two aliases for each index;
-
or drop your indexes and have Hibernate Search re-create empty indexes on startup: it will create the aliases. In this case, you will also need to reindex.
Delayed commits and near-real-time for the Lucene backend
As of HSEARCH-3775, the Lucene backend can now be configured to commit the writer or refresh the reader periodically (e.g. every second), instead of doing it as soon as possible.
This feature, which was already available but exposed differently in Search 5, can lead to substantial performance improvements. See this section of the documentation for details.
Fixed an indexing bug for nested documents in the Lucene backend
HSEARCH-3834 fixed a bug that caused nested documents to be left in the index indefinitely after their root document was deleted. This bug did not affect the results of search queries: the nested documents were not visible after deletion of the root document. However, this could lead to indexes taking more space than necessary.
In order to clean up your index, you should reindex.
More generic wording in the Search DSL
As of HSEARCH-3807, a few methods in the Search DSL have been renamed:
-
searchSession.search(…).predicate(…)
becomessearchSession.search(…).where(…)
. -
searchSession.search(…).asProjection(…)
becomessearchSession.search(…).select(…)
. -
searchSession.search(…).asProjections(…)
becomessearchSession.search(…).select(…)
. -
searchSession.search(…).asEntity(…)
becomessearchSession.search(…).selectEntity()
. -
searchSession.search(…).asEntityReference(…)
becomessearchSession.search(…).selectEntityReference()
.
The methods with the old name are still present, though deprecated. They will be removed before Hibernate Search 6.0.0.Final is released.
Version upgrades
-
HSEARCH-3799: Upgrade to Lucene 8.4.1
-
HSEARCH-3829: Upgrade to Elasticsearch 7.6
-
HSEARCH-3830: Upgrade to Hibernate ORM 5.4.12.Final
Hibernate Search 6 requires ORM 5.4.4.Final or later to work correctly. Earlier 5.4.x versions will not work correctly. |
Backward-incompatible changes
-
HSEARCH-3808: The names of synchronization strategies for automatic indexing have changed:
-
queued
⇒async
. -
committed
(the default) ⇒write-sync
(still the default). -
searchable
(commonly used for tests) ⇒sync
(still recommended for tests only).You will need to update the value of the property
hibernate.search.automatic_indexing.synchronization.strategy
in your configuration.
-
-
HSEARCH-3460: an explicit
flush()
no longer implicitly refreshes the index; you will need to use the newrefresh()
operation. -
Full reindexing is necessary if you use the Lucene backend and take advantage of nested documents (
@IndexedEmbedded(storage = NESTED)
). See above for details. -
Dropping and re-creating your indexes is necessary if you use the Elasticsearch backend. See above for details or workarounds.
Documentation
-
HSEARCH-3808: The documentation of automatic indexing synchronization strategies was improved and should now be clearer.
Other improvements and bug fixes
-
HSEARCH-3833: Writing on different local-heap indexes will provoke LockObtainFailedException
-
HSEARCH-3801: Hibernate Search blocks loading of non hibernate batch jobs
-
HSEARCH-3815: Stop publishing the mapper-javabean module
-
HSEARCH-3819: JsonSyntaxException when validating or migrating an Elasticsearch schema with a geo_point field with null_value
-
HSEARCH-3824: Automatically filter search results based on provided routing keys
-
HSEARCH-3825: Purging a document from the POJO mapper will lead to NPE
-
HSEARCH-3836: Allow explicit routing for purges
-
HSEARCH-3778: Remove "index_metadata_complete" configuration property
-
HSEARCH-3779: Remove automatic index optimization
-
HSEARCH-3826: Drop support for non-exclusive index use
-
HSEARCH-3831: Allow setting the automatic indexing sync strategy to a custom bean in configuration
And more. For a full list of changes since the previous releases, please see the release notes.
How to get this release
All details are available and up to date on the dedicated page on hibernate.org.
Feedback, issues, ideas?
To get in touch, use the following channels:
-
hibernate-search tag on Stackoverflow (usage questions)
-
User forum (usage questions, general feedback)
-
Issue tracker (bug reports, feature requests)
-
Mailing list (development-related discussions)