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

Hibernate Search 4.4.0.Beta1 已准备就绪,可供下载!您可以从 Maven 仓库或从 Sourceforge 获取。

索引分片

分片是 Apache Lucene 用户中的一种常见做法,Hibernate Search 自从几年前就支持它。这意味着我们将索引存储分割成多个 Lucene 索引,同时隐藏逻辑复杂性。这通常用于

  • 保持单个索引的大小合理:便于备份和性能
  • 针对不同的语言/术语对单个索引进行专业化(下面会详细介绍)
  • 分离主节点以在多个节点上扩展写入吞吐量
  • 法律要求将某些数据存储在物理上独立的媒体上

然而,到目前为止,您需要在 Hibernate Search 配置中配置所需的分片数量,这基本上需要您具备应用将使用哪些分片的高级知识。

动态分片

在本次 4.4.0.Beta1 版本中添加的新功能使得您不必提前知道在运行时可能需要哪些分片。例如,如果您根据描述语言对实体进行分片,只需将一个实体存储在新语言中,就可以动态地触发创建新的索引基础设施。

所有详细信息可以在 参考文档 中找到。

在之前的分片功能中,我们现在将其称为“静态分片”并将其弃用,您可能已经习惯于处理索引数组。分片通过其在数组中的位置进行标识。在新模型中,分片通过一个名称进行标识:一个简单的字符串,它映射到它们的 IndexManager 名称。

实现者需要创建一个ShardIdentifierProvider,该Provider需要满足以下需求

在启动时发现现有分片

由于分片没有在配置中定义,您需要通过一些代码提供已知分片的列表。已设置一种新机制,例如,可以在初始化阶段使用Hibernate Session查询数据库。请参阅AnimalShardIdentifierProvider示例实现。

在运行时发现新分片

ShardIdentifierProvider需要提供的第二个操作是监视新的分片标识符,并最终通知框架。

列出已知分片标识符

最后,ShardIdentifierProvider实现需要记录已知的分片名称;这需要一些并发代码,希望示例能有所启发。

您还可以通过监视您的自定义FullTextFilters在查询中的应用,使您的实现更加智能,以缩小查询应执行的分片。更多信息请参阅使用分片环境中的过滤器

通常,问题跟踪器是JIRA,所有代码都在GitHub上:欢迎提交拉取请求和反馈。

有关此版本中所有更改的详细列表,请参阅发行说明

下一个目标是努力实现4.4.0.Final版本。如果您能帮助我们快速实现这一目标,那么我们将最终分支到下一个主要版本,并开始进行支持Apache Lucene版本4所需的转换。


返回顶部