Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用关系数据库映射Lucene搜索结果_Java_Search_Lucene - Fatal编程技术网

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

Java 用关系数据库映射Lucene搜索结果,java,search,lucene,Java,Search,Lucene,我有一份包含文件清单的申请。这些文件是 使用Lucene编制索引。 我可以搜索文档的关键字。我循环TopDocs并获取 ID字段(每个Lucene文档的),它与my中的ID列相关 关系数据库。从所有这些ID中,我创建了一个列表。 在建立了ID列表之后,我进行了一个正在执行的数据库查询 以下SELECT语句(JPA): 此文档列表将发送到视图(GUI) 但是,有些文件是私人文件,不应列入清单。所以,, 我们在SELECT查询中有一些额外的语句来执行一些安全性操作 检查: 但现在我想知道:我正在用L

我有一份包含文件清单的申请。这些文件是 使用Lucene编制索引。 我可以搜索文档的关键字。我循环TopDocs并获取 ID字段(每个Lucene文档的),它与my中的ID列相关 关系数据库。从所有这些ID中,我创建了一个列表。 在建立了ID列表之后,我进行了一个正在执行的数据库查询 以下SELECT语句(JPA):

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

但是,有些文件是私人文件,不应列入清单。所以,, 我们在SELECT查询中有一些额外的语句来执行一些安全性操作 检查:

但现在我想知道:我正在用Lucene的速度快速搜索 文档,但我仍然必须执行SELECT查询。所以我失去了 这台机器的性能:-(。。。 Lucene是否有一些组件为您进行此映射?或者 在这个问题上有什么最佳实践吗?大型项目如何映射Lucene 关系数据库的结果?因为视图应该呈现 结果如何

非常感谢


Jochen

为什么不使用lucene对数据库中的表进行索引?这样,您可以在1个lucene查询中完成所有操作。

如果这是一个大问题,那么可能值得一看,它支持文档级安全性,可能适合您的需要。

一些建议:

  • 在Lucene中,您可以根据自己的规则使用a缩小搜索结果的范围
  • 将主键或唯一键(ID、序列号等)存储在Lucene中。然后,您的关系数据库可以进行唯一键查找并使事情变得非常快速
  • Lucene也可以作为文档的存储。如果适用于您的情况,您只需从Lucene检索单个文档的内容,而不需要转到关系数据库

您担心会受到什么样的性能影响?Lucene是用于索引的,理想情况下,在它下面会有一个数据库或文件系统。如果Lucene下面的关系数据库是您系统其余部分的合适选择,那么您所描述的是正确的方法。我想我可以为我们提供一些帮助e Lucene所以我不需要一个MySQL查询。只需要从Lucene索引中获取所有文档属性/详细信息。但是由于额外的检查,我们需要执行额外的MySQL查询。Lucene可以存储Java对象吗?因为你告诉我:“Lucene也可以作为文档的存储”.Document.java是一个类,它包含我实际文档的一些属性(PDF、TXT等)。我认为您指的是文档的文本表示,而不是java对象……是的。对于每个文档的每个字段,Lucene可以将字段内容存储为java字符串或字节数组。请参阅。如果您有一些纯文本(例如,纯文本或HTML),Lucene可以将其存储为字符串。或者,如果您有Java对象,可以将其序列化(例如,使用ObjectOutputStream和ByteArrayOutputStream)在一个字节数组中,Lucene可以存储字节数组。然后,在搜索时,一旦你有了文档ID和字段名,你就可以向Lucene索要字符串/字节数组。安全限制不在一个表中。安全规则分布在我的数据库中(在其他表中-很抱歉,我最初的帖子没有说得很清楚)。如果所有规则都在文档表上,那么我可以存储规则并执行单个Lucene QueryTanks柿子,有趣的!:-)
SELECT d From Document WHERE id IN (##list of ID's retrieved from Lucene##)
SELECT d From Document WHERE id IN (##list of ID's retrieved from Lucene##)
AND rule1 = foo
AND rule2 = bar