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

use*_*403 2 java lucene hibernate hibernate-search

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

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

谢谢!

San*_*nne 5

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

这有很多很好的理由:

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

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