我们正在使用Spring MVC,Spring和Hibernate开发Web应用程序。
我们需要为我们的应用程序添加有效的自由文本搜索功能。为此,我们考虑使用Hibernate Search(它使用Lucene)或直接使用lucene。
对于我们来说,最好的选择是什么,因为我们已经在我们的应用程序中使用了hibernate?一个人的优点和缺点是什么?
感谢。
答案 0 :(得分:6)
你自己说过 - 你会以某种方式使用Lucene。
原始的Lucene API不是很容易使用。它比Hibernate Search低得多。如果你已经在使用Hibernate,那么这是一个明智的选择 - 使用Hibernate Search来实现你的文本搜索功能。
答案 1 :(得分:4)
该项目的目标不是与Lucene和Solr竞争,而是为了尽可能地与Hibernate应用程序集成,以避免必须保持两个世界同步并复制所有映射和CRUD操作。
虽然我们提供了一些常见的帮助程序和一个很好的封装,但Hibernate Search也可以直接引用Lucene API,因此如果您发现自己需要使用“原始”Lucene API,您将永远不会被卡住。同样,为了写入索引,Hibernate Search提供了一个可以解决大多数已知需求的常见模式,但是如果您有非常非标准的要求,您可以完全控制书面文档。
Solr是一个不错的选择,但由于它是一个单独的服务器,你必须通过REST API与它进行交互,这与它的优点和缺点完全不同。拥有第二个要管理的服务并不总是需要,当然远程调用永远不会像直接引用Lucene及其所有内部过滤器和缓存那样高效。 并非所有Lucene的功能都可以通过远程API公开,如果你需要做一些“低级”操作,如果没有在Solr中实现,你将无法做到(没有修补Solr)。 Solr非常可爱,特别是当你想与其他非Java应用程序共享索引时,我们可能会为Hibernate Search添加一个Solr后端,以最终使Solr服务器保持同步(特别是如果对它感兴趣,可能一些帮助)。
最后,Lucene API真的很难核心。我们花了很多精力来充分利用它来提供最佳性能,同时向使用Hibernate Search的人们提供稳定的API,基本上到现在为止所有版本都向后兼容,以提供“使用最新”的“插入式”性能提升来自Lucene的最大技巧 - 实际上经常改变API;这些变化总是令人兴奋,但如果你没有使用适当的抽象,请准备好在你的应用程序中维护它。
答案 2 :(得分:1)
使用Lucene的另一种方法是获得称为SOLR的middlman API。 SOLR将连接到Lucene并执行HTTP调用以进行搜索。请注意,您需要构建和解析Solr消耗的XML。 Lucene的所有功能都是通过SOLR实现的,应该非常有用。