I am please to announce the GA release of Hibernate Search 3.1. This release focuses on performance improvement and code robustness but also add interesting new features focused on usability:
- An analyzer configuration model to declaratively use and compose features like phonetic approximation, n-gram approximation, search by synonyms, stop words filtering, elision correction, unaccented search and many more.
- A lot of performance improvements at indexing time (including reduced lock contention, parallel execution).
- A lot of performance improvements at query time (including I/O reduction both for Lucene and SQL, and better concurrency).
- Additional new features both for indexing and querying (including support for term vector, access to scoped analyzer at query time and access to results explanation).
A more detailed overlook of the features follows
- Support for declarative analyzer composition through the Solr library
Analyzers can now be declaratively composed as a tokenizer and a set of filters. This enable easy composition of the following features: phonetic approximation, n-gram approximation, search by synonyms, stop words filtering, elision correction, unaccented search and so on.
- Support for dynamic analyzers
Allows a given entity to defined of the analyzer used at runtime. A typical use case is multi-language support where the language varies from one entity instance to an other.
Indexing performance has been enhanced and new controls have been added
- Better control over massive manual indexing (flushToIndexes())
- Support for term vector
- Support for custom similarity
- Better control over index writing (RAM consumption, non-compound file format flag, ...)
- Better support for large index replication
- Improve contention and lock window during indexing
- Reduce the number of index opening/closing
- Indexing is done in parallel per directory
New useful features have been added to queries and performance has been improved.
- Expose entity-scoped and named analyzer for easy reuse at query time
- Filter results (DocIdSet) can now be cached declaratively (default)
- Query results Explanation is now exposed for better debugging information
- Reduces the number of database roundtrips on multi-entity searches
- Faster Lucene queries on indexes containing a single entity type (generally the case)
- Better performance on projected properties (no noticeable overhead compared to raw Lucene calls)
- Reduction of I/O consumption on Lucene by reading only the necessary fields of a document (when possible)
- Reduction of document reads (during pagination and on getResultSize() calls)
- Faster index reopening (keeps unchanged segments opened)
- Better index reader concurrency (use of the read only flag)
- Migration to Lucene 2.4 (and its performance improvements)
- Upgrade to Hibernate Core 3.3
- Use SLF4J as log facade
- Fix a few race conditions on multi core machines
- Resources are properly discarded at SessionFactory.close()
- Fix bug related to embedded entities and @Indexed (HSEARCH-142)
- Filter instances are properly cached now
- And more (see the change logs)
Many thanks to everyone who contributed to the development and test of this release. Especially, many thanks to Sanne and Hardy who worked tirelessly pushing new features and enhancements and fixing bugs while John and I where finishing Hibernate Search in Action.
We have some features on the work that we could not put in 3.1, so stay tuned.