We just published Hibernate Search 7.2.0.CR1, a first candidate release of the next minor version of Hibernate Search.
This version brings a new prefix
predicate and a few improvements for the knn
predicate,
compatibility with OpenSearch 2.15,
upgrades to Hibernate ORM 6.6,
and addresses a few bugs.
What’s new
For a summary of all new features and improvements since 7.1, head to the dedicated page on hibernate.org. |
Dependency upgrades
- Hibernate ORM (HSEARCH-5217)
-
Hibernate Search now depends on Hibernate ORM 6.6.0.CR2.
- Lucene (HSEARCH-5184)
-
The Lucene backend now uses Lucene 9.11.1.
- OpenSearch (HSEARCH-5181)
-
The Elasticsearch backend now is compatible with OpenSearch 2.15 as well as with other versions that were already compatible.
- Others
-
-
HSEARCH-5202: Upgrade to Elasticsearch client 8.14.3
-
HSEARCH-5200: Upgrade to Jackson 2.17.2.
-
HSEARCH-5212: Upgrade to Avro 1.12.0.
-
HSEARCH-5167: Upgrade to HPPC 0.10.0.
-
HSEARCH-5179: Upgrade to AWS SDK 2.26.4.
-
knn
predicate updates
The OpenSearch 2.14 release introduced a way to apply score/similarity filters to a knn query.
This means that previous limitations imposed on the vector search filtering when using the OpenSearch distribution
of the Elasticsearch backend are now removed.
It is worth mentioning that because of how this filter is implemented on the OpenSearch side,
applying the similarity filter will result in ignoring the k
value.
The knn
predicate, besides the existing .requiredMinimumSimilarity(..)
filter,
now also has a score-based alternative: requiredMinimumScore(..)
.
With knn search, similarity and score are derived one from the other, and in some scenarios, it may be simpler to use score,
while in others — similarity.
To remind you how the vector search works: for vector fields to be indexed, they should be annotated with a @VectorField
annotation:
@Entity
@Indexed
public class Book {
@Id
private Integer id;
@VectorField(dimension = 512)
private float[] coverImageEmbeddings;
// Other properties ...
}
Then, searching for vector similarities is performed via a knn
predicate:
float[] coverImageEmbeddingsVector = /*...*/
List<Book> hits = searchSession.search( Book.class )
.where( f ->
f.knn( 5 ) (1)
.field( "coverImageEmbeddings" ) (2)
.matching( coverImageEmbeddingsVector ) (3)
.requiredMinimumSimilarity( similarity ) (4)
).fetchHits( 20 );
1 | Provide the number of similar documents to look for. |
2 | Specify the name of the vector field. |
3 | Provide a reference vector; matched documents will be the ones whose indexed vector is "most similar" to this vector. |
4 | Specify the minimum required similarity between the reference and indexed vectors;
documents where indexed vector similarity is less than the specified similarity value will be filtered out.
Alternatively, the requiredMinimumScore( score ) filter can be applied instead of the requiredMinimumSimilarity( similarity ) . |
See this section of the reference documentation on vector fields
and the one on a knn
predicate
for more information.
Prefix predicate
The prefix
predicate matches documents for which a given field has a value starting with a given string.
List<Book> hits = searchSession.search( Book.class )
.where( f -> f.prefix().field( "description" )
.matching( "rob" ) )
.fetchHits( 20 );
See this section of the reference documentation on the prefix
predicate
for more information.
ValueConvert
gets deprecated
The Search DSL has been using ValueConvert
enum to let the user specify how the values in search queries have to be converted,
be it the ones passed to the predicates/aggregations/sorts or the ones returned by projections/aggregations.
Moving forward, to better support new use cases and bring better clarity on the expectations, this enum is replaced with the new one: ValueModel
.
At the moment ValueModel
provides these options:
MAPPING
-
This is the default model that allows working with the types as defined on the entity side.
INDEX
-
This model does not apply conversion and allows working with the types as defined on the index side.
STRING
-
This model applies formatting and parsing allowing working with the string representation of values.
RAW
-
This model does not apply conversion and allows working with the types that the backend operates with on a low level.
For each deprecated method accepting the ValueConvert
input, there is now an alternative that accepts ValueModel
instead.
Replace ValueConvert.YES
with ValueModel.MAPPING
and ValueConvert.NO
with ValueModel.INDEX
in your code where the values were set explicitly.
See this section of the reference documentation on the types of arguments passed to the DSL and on the types of projected values for more information.
Other improvements and bug fixes
-
HSEARCH-5170: Fix a potential issue when setting an association to
null
before removing an entity may not trigger indexing
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.
Getting started, migrating
For new applications, refer to the getting started guide:
For existing applications, Hibernate Search 7.2 is a drop-in replacement for 7.1, assuming you also upgrade the dependencies. Information about deprecated configuration and API is included in the migration guide.
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)