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

标签 java hibernate lucene hibernate-search

我正在使用建立在 Lucene 索引之上的 Hibernate Search。如果针对数据库表创建索引,则返回结果的性能会很好。

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

谢谢!

最佳答案

除非你使用 Projections索引仅用于识别与查询匹配的主键集,然后用于从数据库加载实体。

这有很多很好的理由:

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

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

关于java - Hibernate Search(Lucene 索引)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560729/

相关文章:

lucene - Solr 更新很慢

solr - Lucene QueryParse 丢弃“解析时

java - 在 Eclipse 插件中,是否存在与 MarkerAnnotationSpecification 扩展点等效的编程方式?

java - 如何清除 Java 中的 JList?

java - Java 中通过反射将字段转换为数组类型

java - 如何在 Hibernate 中复制引用?

java - 在 Mockito 中模拟深层对象

hibernate - 带有标准别名的 Grails GORM

java - 如果所有属性都是键的一部分,为什么 hibernate 的 getPropertyNames 返回一个空列表?

search - 我可以保护短单词免受 Solr 中 n-gram 过滤器的影响吗?