Hello,
It's been some time we have been working on a proof-of-concept for Search
6, and I think it is mature enough to receive some early feedback. So to
anyone interested: I would love to read your comments! Note that the APIs
are not set in stone yet, everything could still change depending on the
feedback.
To help you form an opinion, I added a "showcase" module with a relatively
realistic domain model (that of Libraries and their Books), a Hibernate
Search mapping and some queries. The showcase uses the Elasticsearch
backend, which is (for now) the only one available; Guillaume is working on
the Lucene one.
The proof-of-concept is available here:
https://github.com/hibernate/hibernate-search-6-poc and the showcase is
located in the "integrationtest/showcase/library" directory.
You can find:
- the domain model, mapped using annotations,
in org.hibernate.search.v6poc.integrationtest.showcase.library.model
- the data access objects implementing CRUD operations
in org.hibernate.search.v6poc.integrationtest.showcase.library.dao; there
are various implementations of the same DAO contracts (more on this in
another email thread).
- the custom bridge implementations
in org.hibernate.search.v6poc.integrationtest.showcase.library.bridge (more
on this in another email thread)
A test allowing you to see it all in action is available in
src/test/java/org/hibernate/search/v6poc/integrationtest/showcase/OrmElasticsearchLibraryShowcaseIT.java
. You can launch it:
- from the command line with "mvn clean install -DskipTests; mvn clean
verify -pl integrationtest/showcase/library" (an Elasticsearch instance
will be spawned automatically)
- or more interstingly from your IDE, with breakpoints. You will need an
Elasticsearch cluster running and accessible from localhost:9200.
I will be starting separate email threads for some topics I would
especially like feedback on. If there are some other topics you would like
discussed, feel free to answer here or start another thread.
As a reminder, and as an explanation of why so many things changed, here
are the main goals of Hibernate Search 6:
- Overhaul the APIs to remove the dependency to Lucene, so that other
technologies can be integrated without hacks (Elasticsearch in particular,
but also maybe in the future Solr).
- Overhaul the bridge APIs to allow:
- Better integration with other technologies (such as Elasticsearch),
in particular by abstracting access to indexed documents (HSEARCH-2186
<
https://hibernate.atlassian.net/browse/HSEARCH-2186>)
- Detection by Hibernate Search of the properties being used, for
better dirty checking [not yet implemented, but the APIs should
allow that]
(HSEARCH-2496 <
https://hibernate.atlassian.net/browse/HSEARCH-2496>)
- Overhaul the Query API to:
- offer a less verbose syntax for simpler queries
- return typed results: if you query the Book index, you get a
List<Book>, not a raw List (HSEARCH-2225
<
https://hibernate.atlassian.net/browse/HSEARCH-2225>)
- be generic, yet extensible depending on the integration (e.g. allow
to nest Elasticsearch JSON inside a query predicate) (HSEARCH-2498
<
https://hibernate.atlassian.net/browse/HSEARCH-2498>)
- Generally ensure the architecture:
- will allow detection by Hibernate Search of the load graph to use
when fetching entities from Hibernate ORM for mass indexing.
- will make it easier to implement alternative mappers in the future (
HSEARCH-1800 <
https://hibernate.atlassian.net/browse/HSEARCH-1800>,
HSEARCH-1401 <
https://hibernate.atlassian.net/browse/HSEARCH-1401>).
While we were at it, I gave a shot to some additional features I felt could
be useful:
- User-defined bridge annotations for user-defined bridges (HSEARCH-175
<
https://hibernate.atlassian.net/browse/HSEARCH-175>)
- Give access to more application context in the bridges (HSEARCH-1839
<
https://hibernate.atlassian.net/browse/HSEARCH-1839>)
- Comply with the JPA access type when accessing entity properties (
HSEARCH-383 <
https://hibernate.atlassian.net/browse/HSEARCH-383>)
--
Yoann Rodiere
yoann(a)hibernate.org / yrodiere(a)redhat.com
Software Engineer
Hibernate NoORM team