使用关系数据库映射Lucene搜索结果

时间:2012-07-05 11:27:38

标签: java search lucene

我有一个包含文件列表的应用程序。这些文件是 使用Lucene索引。 我可以搜索文档的关键字。我循环TopDocs得到了 ID字段(每个Lucene doc)与我的ID列相关 关系型数据库。从所有这些ID中,我创建了一个列表。 在构建ID列表之后,我创建了一个正在执行的数据库查询 以下SELECT语句(JPA):

SELECT d From Document WHERE id IN (##list of ID's retrieved from Lucene##)

此文档列表将发送到视图(GUI)。

但是,有些文件是私人的,不应该在列表中。因此, 我们在SELECT查询中有一些额外的语句来做一些安全性 检查:

SELECT d From Document WHERE id IN (##list of ID's retrieved from Lucene##)
AND rule1 = foo
AND rule2 = bar

但现在我想知道:我正在使用Lucene的速度来快速搜索 文档,但我仍然要做SELECT查询。所以我很失落 在这一个表现:-( ... Lucene是否有一些组件可以为您执行此映射?或者是 有关于这个问题的最佳做法吗?大型项目如何映射Lucene 结果到关系数据库?因为视图应该呈现 结果

非常感谢!

约亨

3 个答案:

答案 0 :(得分:0)

为什么不使用lucene索引数据库中的表?这样你就可以在1 lucene查询中做所有事情。

答案 1 :(得分:0)

如果这是一个大问题,那么值得查看支持可能符合您需求的文档级安全性的ManifoldCF

答案 2 :(得分:0)

一些建议:

  • 在Lucene中,您可以使用Filter根据您的规则缩小搜索结果范围。
  • 在Lucene中存储主键或唯一键(ID,序列号等)。然后,您的关系数据库可以进行独特的键查找并使事情变得非常快。
  • Lucene也可以充当您文档的存储空间。如果适用于您的情况,您只需检索单个文档'来自Lucene的内容并且不需要访问您的关系数据库。