Hibernate Search 是一个库,通过自动索引实体,将 Hibernate ORM 与 Apache Lucene 或 Elasticsearch 集成,实现高级搜索功能:全文搜索、地理空间搜索、聚合等。有关更多信息,请参阅 hibernate.org 上的 Hibernate Search。

最新版本的 Hibernate Search beta v. 4.2.0.Beta2 已发布!

在本迭代中,我们引入了 Apache Tika 集成,空间查询现在可以按距离排序,以及一些不太引人注目的改进。

Apache Tika 集成

Apache Tika 允许您提取文本并索引任何类型的文档,如 MP3 元数据、PDF 文本、办公文件。如果您从数据库加载媒体文件,可以注释 Blob 字段,或者让 String 字段指向资源或文件路径。

@Entity
@Indexed
public class Book {

        Integer id;
        Blob content;

        @Id @GeneratedValue
        public Integer getId() {
                return id;
        }

        public void setId(Integer id) {
                this.id = id;
        }

        @Lob @Basic(fetch = FetchType.LAZY)
        @Field @TikaBridge // <- just add the TikaBridge as an adaptor to make the Blob indexable as any
        public Blob getContent() {
                return content;
        }

        public void setContent(Blob content) {
                this.content = content;
        }
}

@TikaBridge 注解支持更多选项来调整文本提取的类型;有关详细信息,请参阅 文档。目前,该功能被视为实验性:我们还没有添加异步文本提取的选项,因此我们可能需要更改 API 以引入该功能。

按距离排序的空间查询

感谢 Nicolas's Helleringer 的努力,现在可以轻松地

  • 返回搜索中心到每个命中点的距离(通过投影)
  • 根据距离应用排序标准

让我们从一个大型自文档示例集中看看一个例子(测试套件!)

QueryBuilder builder = em.getSearchFactory().buildQueryBuilder().forEntity( Cafe.class ).get();

org.apache.lucene.search.Query luceneQuery = builder.spatial()
    .onCoordinates( "location" )
    .within( 100, Unit.KM )
        .ofLatitude( centerLatitude )
        .andLongitude( centerLongitude )
    .createQuery();

FullTextQuery hibQuery = em.createFullTextQuery( luceneQuery, Cafe.class );

Sort distanceSort = new Sort( new DistanceSortField( centerLatitude, centerLongitude, "location" ) );

hibQuery.setSort( distanceSort );

hibQuery.setProjection( FullTextQuery.THIS, FullTextQuery.SPATIAL_DISTANCE );

hibQuery.setSpatialParameters( centerLatitude, centerLongitude, "location" );

List results = hibQuery.getResultList();

升级的一些更多原因

  • Apache Lucene 升级到版本 3.6.1
  • JMS 和 JMX 集成得到改进
  • MassIndexer 现在正确应用了 EntityIndexingInterceptor
  • 降低内存使用
  • 改进空间查询
  • 改进了一些类加载器,以更好地与其他库集成

完整的更改列表可以在此处找到:这里。请查看迁移指南

自4.2.0.Beta1以来已经有一段时间了,但夏天已经过去了,所以尽快尝试这些,因为我们将很快进入最终版本!和以往一样,非常欢迎反馈。


返回顶部