7

我正在研究针对我们的数据库提供更好搜索功能的机制。它目前是一个巨大的瓶颈(导致长期查询损害我们的数据库性能)。

我的老板想让我研究Solr,但仔细观察,似乎我们实际上想要某种与 Lucene 本身的数据库集成机制。

Lucene FAQ中,他们推荐使用Hibernate SearchCompassDBSight

作为我们当前技术堆栈的背景,我们在 Tomcat 上使用直接的 JSP,没有 Hibernate,在其之上没有其他框架……只是针对 DB2 数据库的直接 Java、JSP 和 JDBC。

鉴于此,似乎 Hibernate Search 可能更难以集成到我们的系统中,尽管在这样的集成之后选择使用 Hibernate 可能会很好。

有没有人可以分享使用这些工具之一(或其他类似的基于 Lucene 的解决方案)的经验,这可能有助于选择正确的工具?

它需要是一个 FOSS 解决方案,理想情况下,它将自动(尽管有效)使用来自数据库的更改来管理更新 Lucene,而无需额外努力在进行更改时通知工具(否则,滚动我自己的 Lucene 解决方案似乎只是一样好)。此外,我们有多个应用程序服务器,只有 1 个数据库(+故障转移),因此如果可以轻松无缝地使用来自所有应用程序服务器的解决方案,那就太好了。

我现在正在继续检查这些选项,但利用其他人的经验会非常有帮助。

4

5 回答 5

3

When you say "search against a DB", what do you mean?

Relational databases and information retrieval systems use very different approaches for good reason. What kind of data are you searching? What kind of queries do you perform?

If I were going to implement an inverted index on top of a database, as Compass does, I would not use their approach, which is to implement Lucene's Directory abstraction with BLOBs. Rather, I'd implement Lucene's IndexReader abstraction.

Relational databases are quite capable of maintaining indexes. The value that Lucene brings in this context is its analysis capabilities, which are most useful for unstructured text records. A good approach would leverage the strengths of each tool.

As updates are made to the index, Lucene creates more segments (additional files or BLOBs), which degrade performance until a costly "optimize" procedure is used. Most databases will amortize this cost over each index update, giving you more stable performance.

于 2008-09-18T20:29:38.893 回答
2

我对 Compass 有很好的体验。它与 hibernate 有很好的集成,并且可以通过其 GPS 设备http://www.compass-project.org/docs/1.2.2/reference/html/gps-将通过 hibernate 和 jdbc 所做的数据更改直接镜像到 Lucene 索引jdbc.html

在所有应用程序服务器上维护 Lucene 索引可能是个问题。如果您有多个应用服务器更新数据库,那么您可能会遇到一些问题,使索引与所有更改保持同步。Compass 现在可能有一个替代机制来处理这个问题。

Alfresco 项目 (CMS) 也使用 Lucene,并具有在服务器之间复制 Lucene 索引更改的机制,这可能有助于处理这些问题。

在 Hibernate Search 真正起步之前,我们就开始使用 Compass,所以我无法提供与它的任何比较。

于 2008-09-17T21:37:24.823 回答
1

LuSql http://code.google.com/p/lusql/允许您将 JDBC 可访问数据库的内容加载到 Lucene 中,使其可搜索。它是高度优化和多线程的。我是 LuSql 的作者,下个月将推出一个新版本(使用新的可插入架构重新架构)。

于 2010-09-14T16:51:22.207 回答
0

对于纯粹的性能提升,搜索 Lucene 肯定会有很大帮助。只索引你关心/需要的东西,你应该很好。如果你愿意,你可以使用 Hibernate 或其他一些东西,但我认为这不是必需的。

于 2008-09-17T19:07:38.570 回答
0

好吧,似乎 DBSight不符合 FOSS 要求,所以除非它是一个绝对出色的解决方案,否则我现在不是一个选择......

于 2008-09-17T19:19:47.573 回答