[hibernate-dev] [HSEARCH][V6-POC] RFC on the Hibernate Search 6 APIs

Yoann Rodiere yoann at hibernate.org
Mon Mar 19 13:28:07 EDT 2018


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 at hibernate.org / yrodiere at redhat.com
Software Engineer
Hibernate NoORM team


More information about the hibernate-dev mailing list