数据库 – 如何使用Lucene对数据库进行最佳搜索?

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

我的老板希望我查看Solr,但仔细观察后,我们似乎真的想要一些与Lucene本身的数据库集成机制.

Lucene FAQ开始,他们推荐Hibernate Search,CompassDBSight.

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

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

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

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

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

解决方法

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

关系数据库和信息检索系统使用非常不同的方法是有充分理由的.你在搜索什么样的数据?你执行什么样的查询

如果我要在数据库之上实现倒排索引,就像Compass那样,我就不会使用他们的方法,即用BLOB实现Lucene的目录抽象.相反,我将实现Lucene的IndexReader抽象.

关系数据库非常能够维护索引. Lucene在此上下文中带来的价值是其分析功能,这对非结构化文本记录最有用.一种好的方法可以利用每种工具的优势.

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

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03