2008-09-17 28 views
7

我正在研究针对我们的数据库更好的搜索功能的机制。它目前是一个巨大的瓶颈(导致长久以来的查询损害了我们的数据库性能)。如何使用Lucene最佳搜索数据库?

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

Lucene FAQ,他们推荐Hibernate SearchCompass DBSight

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

鉴于此,看起来Hibernate Search可能会更难以集成到我们的系统中,尽管在这种集成之后可以选择使用Hibernate。

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

它需要是一个FOSS解决方案,理想情况下将管理更新Lucene与数据库的变化自动(虽然有效),没有额外的努力通知工具,当更改已经完成(否则,似乎滚动我自己的Lucene解决方案会一样好)。另外,我们有多个应用程序服务器,只有一个数据库(+故障转移),所以如果能够很容易地无缝地使用来自所有应用程序服务器的解决方案,那将会很不错。

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

+0

你有没有加入Lucene? – 2013-09-12 22:51:35

回答

0

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

+0

感谢您的回应!不幸的是,我真的很想看看这些框架可以提供什么,所以我不必推出我自己的全面解决方案。 – 2008-09-17 19:13:46

2

我有好的经验和指南针。它与hibernate非常好的集成,并且可以通过hibernate和jdbc将通过GPS设备http://www.compass-project.org/docs/1.2.2/reference/html/gps-jdbc.html直接发送到Lucene索引的数据更改镜像。

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

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

我们在Hibernate Search开始使用之前就开始使用Compass,所以我无法提供任何比较。

3

当你说“按照数据库搜索”时,你是什么意思?

关系数据库和信息检索系统使用完全不同的方法是有原因的。你在搜索什么样的数据?你执行什么样的查询?

如果我要在数据库顶部实现一个倒排索引,就像Compass那样,我不会使用他们的方法,它是用BLOBs实现Lucene的Directory抽象。相反,我会实现Lucene的IndexReader抽象。

关系数据库相当有能力维护索引。 Lucene在这种情况下带来的价值在于它的分析能力,这对非结构化文本记录非常有用。一个好的方法会利用每个工具的优势。

当更新索引时,Lucene会创建更多的段(附加文件或BLOB),这会降低性能,直到使用昂贵的“优化”过程。大多数数据库将通过每次索引更新来摊销此成本,从而为您提供更稳定的性能。

1

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