我只是想知道我们是否可以在lucene中实现一些RDBMS功能。
实施例: 1)我有10,000个项目文档(pdf文件),必须将其内容编入索引以使其可供搜索。 2)每份文件都与单一项目有关。项目可以包含项目名称,编号,开始日期,结束日期,位置,类型等详细信息。
我必须在pdf文件的内容中搜索给定的关键字,但在显示结果时,我想显示项目元数据,如第(2)点所述。
我的想法是在索引时将名为projectId的字段与每个pdf文件相关联。一旦我们得到了,我们将再次触发搜索以获取项目元数据。
这样我们就可以避免重复数据。此外,如果我们想要更新项目元数据,我们最终只会在SINGLE PLACE更新。否则,如果我们使用所有pdf doument索引存储这个元数据,我们将最终更新所有文档,这不是我想要的方式。
请告知。
答案 0 :(得分:1)
如果我理解正确,你有两个问题:
答案 1 :(得分:1)
听起来非常棒。您将拥有的唯一限制(通过在Lucene中存储对项目的引用而不是项目数据本身)是您将无法同时查询文档文本和项目元数据。例如,“documentText:foo OR projectName:bar”。如果你没有这样的要求,那么看起来像在Lucene中存储ID,这是指数据库行是一件好事。
答案 2 :(得分:1)
我不确定您的整体设置,但也许Hibernate Search适合您。它允许您将关系数据库的好处与Lucene等全文搜索引擎的强大功能结合起来。元数据可以存在于数据库中,可能与原始pdf文档一起存在,而Lucene文档只包含可搜索的数据。
答案 3 :(得分:1)
这绝对是可能的。但是要始终注意这样一个事实,即你正在使用Lucene来实现它不适合的东西。一般来说,Lucene专为全文搜索而设计,而不是用于映射关系内容。因此,关系内容的系统越复杂,您就会越多地看到性能下降。
特别是,有一些领域需要密切关注:
如果您需要一个针对关系内容设计的更强大的索引,那么有一些层次索引工具(由Apache开发,名为Jackrabbit)值得研究。
随着项目的不断发展,您还可以查看由Apache开发的Solr,它提供了一些附加功能,例如多方位搜索。
答案 4 :(得分:1)
你可以这样使用Lucene;
优点:
全文搜索易于实现,而RDBMS则不然。
缺点:
参照完整性:您可以在RDBMS中免费获得它,但在Lucene中,您必须自己实现它。