We just published Hibernate Search 7.1.0.Alpha1, a first alpha release of the next major version of Hibernate Search.
This version opens up possibilities for searching over binary (image, audio or video) data using vector search.
Beyond that, it improves Hibernate Search compatibility with other frameworks.
What’s new
Hibernate Search 7.1 is still in its early stages of development: some features are still incomplete or may change in a backward-incompatible way. |
Vector search for the Lucene Backend
Hibernate Search now allows vector search in the Lucene backend as an incubating feature.
Vector search provides the tools to search over binary (images, audio or video) or text data:
external tools convert that data to vectors (arrays of bytes or floats, also called "embeddings"),
which are then used for indexing and queries in Hibernate Search.
Hibernate Search introduces a new field type — @VectorField
and a new predicate knn
, so that the vectors can be indexed
and then searched upon.
Vector fields can work with vector data represented as byte
or float
arrays in the documents.
Out of the box byte[]
and float[]
property types will work with the new field type. For any other entity property types,
a custom value bridge
or value binder should be implemented.
Keep in mind that indexed vectors must be of the same length
and that this length should be specified upfront for the schema to be created:
@Entity
@Indexed
public class Book {
@Id
private Integer id;
@VectorField(dimension = 512)
private float[] coverImageEmbeddings;
// Other properties ...
}
Searching for vector similarities is performed via a knn
predicate:
float[] coverImageEmbeddingsVector = /*...*/
List<Book> hits = searchSession.search( Book.class )
.where( f ->
// provide the number of similar documents to look for:
f.knn( 5 )
// the name of the vector field:
.field( "coverImageEmbeddings" )
// matched documents will be the ones whose indexed vector
// is "most similar" to this vector
.matching( coverImageEmbeddingsVector )
// additionally an optional filter can be supplied
// to provide a regular fulltext search predicate
.filter( f.match().field( "authors.firstName" ).matching( "arthur" ) )
).fetchHits( 20 );
See this section of the reference documentation on vector fields
and the one on a new knn
predicate
for more information.
Other improvements and bug fixes
-
HSEARCH-5024: Hibernate Search will no longer fail to boot when reading nested JARs in Spring Boot 3.2+.
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.1 is a drop-in replacement for 7.0, 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)