最新版本的 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以来已经有一段时间了,但夏天已经过去了,所以尽快尝试这些,因为我们将很快进入最终版本!和以往一样,非常欢迎反馈。