1

我使用Lucene.net在我们的 CMS 上索引内容和文档等。到目前为止效果很好,但现在我必须考虑到网页的以下添加:

  1. 发布日期
  2. 到期日
  3. 页面“处于活动状态”
  4. 用户授权

因此,搜索结果应该只显示发布/到期窗口内的页面,这些页面是“活动的”并且当前用户有权查看。

我应该在 Lucene 索引中包含上述信息吗?它会使查询变得更复杂一些,但 hits 集合只会返回“有效”文档,这将使分页结果更容易。

另一方面,我将重复 CMS 数据库中已经存在的信息,因此我将冒着数据完整性的风险,并且每当上述列表中的任何内容发生更改时,我都会更新索引以及实际内容本身。

还有其他人有这个问题吗?你是怎么解决的?谢谢。

编辑:我可能需要使用“FieldCache”(此处提到)将“有效”文档 ID 传递给 lucene 搜索?

4

2 回答 2

1

首先查询 CMS 数据库,并使用所有匹配的文档构建一个 BitSet(您需要一个 FieldCache 来在您的应用程序的文档 ID 与 Lucene 的内部文档 ID 之间进行转换)。然后,您可以使用过滤器(包装 BitSet)对索引运行 Lucene 查询。

您将所有可变数据保存在数据库中(它所属的位置),您不必担心更新或重建索引。这也将运行得非常快。

PS 我只使用了 Lucene 的 Java 版本,但这在 Lucene.NET 中应该可以正常工作

于 2009-04-27T17:58:14.267 回答
0

..所以搜索结果应该只显示发布/到期窗口内的页面,是“活动的”并且当前用户有权查看。

有几种方法可以处理授权问题。您可以维护多个索引(每个权限级别一个),使用查询过滤结果(通过存储所需的权限)或在显示结果之前过滤结果。如果只有几个级别,我认为我会维护单独的索引 - 这似乎是最安全的。

至于“处于活动状态” - 你能记住这一点来重建你的索引吗?只需经常在后台重建您的索引,并且只添加活动内容。您可能有太多信息无法实现这一点 - 但 Lucene 非常快。

于 2009-04-27T15:58:58.657 回答