我有一个应用程序,其中案例记录存储在Derby数据库中,并且正在使用Lucene来创建全文索引案例说明和描述。全文是相对静态的,但是一些数据库字段可以在许多记录上每天更改,从数据库更新Lucene不是一个好的选择。
我想要做的是允许用户执行全文查询以及一些SQL条件。例如:所有在过去2天内编辑过“water”和“melon”(全文部分)的案例,其“重要性”标志设置为“中等”(SQL部分)。 (全文查询可能要复杂得多,类似于SQL部分)。
这涉及全文结果与DB结果的“连接”(实际上是“AND”),我可以运行全文搜索并检查每条记录的DB标准,反之亦然,具体取决于是否全文或SQL标准产生较少数量的记录。这显然是一个缓慢的过程。
是否有更好/更快的解决方案?
答案 0 :(得分:0)
我们做过类似的事情。我们使用了postgres数据库,但正如你所说,从数据库返回所有匹配的id以检查索引太慢了。
在我们的例子中,我们只需要更新文档的标志。幸运的是,我们可以允许我们对数据库进行一些昂贵的更新操作。因此,我们决定为每个包含所有匹配文档ID的标志创建一个blob条目作为序列化ArrayList或类似的东西。搜索时,我们只需要从数据库中检索一个条目,该条目足够快,可以容纳一百万个ID。