3.7. Hibernate Search
Important
3.7.1. Hibernate Search Class Name and Package Updates
JDG 6.x Location | JDG 7.0 Location |
---|---|
org.hibernate.search.engine.impl.SearchMappingBuilder | org.hibernate.search.engine.spi.SearchMappingBuilder |
org.hibernate.search.Environment | org.hibernate.search.cfg.Environment |
org.hibernate.search.FullTextFilter | org.hibernate.search.filter.FullTextFilter |
org.hibernate.search.indexes.impl.DirectoryBasedIndexManager | org.hibernate.search.indexes.spi.DirectoryBasedIndexManager |
org.hibernate.search.infinispan.impl.InfinispanDirectoryProvider | org.hibernate.search.infinispan.spi.InfinispanDirectoryProvider |
org.hibernate.search.ProjectionConstants | org.hibernate.search.engine.ProjectionConstants |
org.hibernate.search.SearchException | org.hibernate.search.exception.SearchException |
org.hibernate.search.spi.MassIndexerFactory | org.hibernate.search.batchindexing.spi.MassIndexerFactory |
org.hibernate.search.spi.SearchFactoryBuilder | org.hibernate.search.spi.SearchIntegratorBuilder |
org.hibernate.search.spi.SearchFactoryIntegrator | org.hibernate.search.spi.SearchIntegrator |
org.hibernate.search.Version | org.hibernate.search.engine.Version |
org.apache.lucene.queryParser.QueryParser | org.apache.lucene.queryparser.classic.QueryParser |
JDG 6.x Name | JDG 7.0 Name |
---|---|
SpatialMode.GRID | SpatialMode.HASH |
3.7.2. Hibernate Search Additions
- A new method,
getShardIdentifiersForDeletion()
, has been added toorg.hibernate.search.store.ShardIdentifierProvider
. Any existing implementations which were not derived fromShardIdentifierProviderTemplate
should be updated. - The Faceting engine has been significantly updated; however, a
@Facet
or@Facets
annotation must be used on any fields intended for faceting.
3.7.3. Hibernate Search Lucene Updates
Numbers and dates are now indexed as numeric fields by default. Properties of type Date
, Calendar
, int
, long
, float
, double
, and their corresponding wrappers, are no longer indexed as strings; instead, they use Lucene's appropriate numeric encoding. If any query previously targeted a string encoded field, but is not encoded numerically, it will need to be updated. Numeric fields must be searched with a NumericRangeQuery
; however, if the Search query DSL is in use it should generate the correct query. In addition, any fields targeted by faceting should now be string encoded.
Note
Date
and Calendar
instances are encoded as a long
value, representing the number of milliseconds since January 1, 1970, 00:00:00 GMT
.
id
fields are an exception to this rule. Even when these fields are represented by a numeric type they will continue to be indexed as a string keyword by default.
@NumericField
is now obsolete, unless a custom precision for the numeric encoding is explicitly specified.
org.hibernate.search.bridge.builtin.IntegerBridge
; other publicly available field bridges may be found in the org.hibernate.search.bridge.builtin
package.
EncodingType
enum; for example, @DateBridge(encoding=EncodingType.STRING)
or @CalendarBridge(encoding=EncodingType.STRING)
.
When using an @IndexedEmbedded
annotation to include fields from a related entity, previously the id
of the related entity was included. These fields are no longer included by default, but may be enabled by using the includeEmbeddedObjectId
attriubte of the @IndexedEmbedded
annotation, as seen below:
@IndexedEmbedded(includeEmbeddedObjectId=true)
The SortField
API has been modified to use SortField.Type.${CLASSNAME}
instead of the previous SortField.${CLASSNAME}
. This behavior is highlighted below:
// Previous API call fulltextQuery.setSort( new Sort( new SortField( "title", SortField.STRING ) ) ); // New API call fulltextQuery.setSort( new Sort( new SortField( "title", SortField.Type.STRING ) ) );
String
requires a single term, even after analysis, a numeric field encoded as an Integer must match SortField.Type.INT
, a numeric field encoded as a Long must be sorted with SortField.Type.LONG
, and so forth.
Similar to Sorting Query Results, each target field must match an appropriate kind of Faceting Query. For instance, a Numeric Facet Query must match a field that was indexed exclusively via the matching Numeric type.
When using @Field(indexNullAs=)
to encode a null marker value in the index, the type of marker must be compatible with all other values which are indexed in the same field. Previously a string keyword, such as null
, could be encoded with numeric fields; however, this is no longer allowed. A number must now be used to represent the null value, such as -1
.
Many of the Analyzer
, TokenFilter
, and CharFilter
classes have been moved, and it is recommended to examine Lucene's API documentation to find the correct replacement.
TokenizerFactory
or TokenFilterFactory
were moved into Apache Lucene. Any applications using these classes should also be updated using the Lucene's API documentation.
3.7.4. Hibernate Search Deprecated Classes
org.hibernate.search.annotations.Key
- there is no replacement for this class; however, it is no longer required for users to provide aKey
object.ContainedInMapping#numericField()
- Usefield().numericField()
instead.