我正在研究使用Lucene和/或Solr在 RDBMS 驱动的 Web 应用程序中提供搜索。对我来说不幸的是,我浏览的所有文档都涉及如何从索引中获取数据。我更关心如何建立一个有用的索引。这样做有什么“最佳实践”吗?
4 回答
多个应用程序会写入数据库吗?如果是这样,那就有点棘手了;您必须有一些机制来识别新记录以提供给 Lucene 索引器。
要考虑的另一点是您想要一个涵盖所有表的索引,还是每个表一个索引。一般来说,我推荐一个索引,该索引中有一个字段来指示记录来自哪个表。
如果您想搜索持久对象而不是非结构化文档, Hibernate支持全文搜索。
您应该了解一个名为Compass的 OpenSymphony 项目。我自己一直远离它,主要是因为它似乎比搜索需要的复杂得多。另外,从文档中我可以看出(我承认我没有时间阅读所有内容),它将 Lucene 段作为 blob 存储在数据库中。如果您熟悉 Lucene 架构,Compass 在数据库之上实现了一个 Lucene Directory。我认为这是错误的做法。我将利用数据库对索引的内置支持并实现 Lucene IndexReader。同样的批评适用于分布式缓存实现等。
作为介绍:
Brian McCallister 写了一篇不错的博客文章:Using Lucene with OJB。
我们今晚将推出我们的第一个使用 Solr 的应用程序。在 Solr 1.3 中,它们包含了 DataImportHandler,它允许您指定数据库表(它们称为实体)及其关系。定义后,一个简单的 HTTP 请求将触发数据的导入。
有关详细信息,请查看DataImportHandler 的 Solr wiki 页面。