Hibernate Search(Lucene索引)如何工作?

时间:2013-01-28 11:10:36

标签: java hibernate lucene hibernate-search

我正在使用基于Lucene索引构建的Hibernate Search。如果针对数据库表创建索引,则返回结果的性能将很好。

我的问题是,一旦创建了索引,如果我们查询结果,Hibernate Search是否使用创建的索引从原始数据库表中获取结果?或者不需要访问数据库来获取结果?

谢谢!

2 个答案:

答案 0 :(得分:5)

除非您使用Projections,否则索引仅用于标识与查询匹配的主键集,然后使用这些索引从数据库加载实体。

有很多很好的理由:

  • 正如您所指出的,我们不会将所有数据存储在索引中:较大的索引是较慢的索引
  • 将所有需要的元数据添加到索引会使索引成为非常昂贵的操作
  • 索引中的值提取根本不高效:它擅长查询,不再需要
  • 关系数据库非常擅长按主键加载数据
  • 如果您的数据库不够好,则可以通过主键加载二级缓存
  • 通过从数据库加载,我们保证一致性,尤其是 async 索引
  • 通过从数据库加载,您有实体参与交易和隔离

也就是说,如果您不需要完全管理的实体,可以使用Projections加载注释为Stored.YES的字段。一种常见的模式是使用投影提供匹配预览,然后当用户单击以获取详细信息以加载与该结果匹配的完整实体时。

答案 1 :(得分:1)

默认情况下,每次通过Hibernate插入,更新或删除对象时,Hibernate Search都会根据documentation更新相应的Lucene索引

因此,进一步搜索只会通过lucene索引生成数据。

另一个问题explaining索引如何运作