我的Lucene文档应该包含哪些内容?

时间:2009-04-27 15:34:43

标签: asp.net lucene lucene.net

我使用Lucene.net在我们的CMS上索引内容和文档等。到目前为止,这种方法运作良好,但现在我必须考虑到以下对网页的补充:

  1. 发布日期
  2. 有效期
  3. Page'有效'
  4. 用户授权
  5. 因此,搜索结果应仅显示“发布/过期”窗口内的页面,“活动”且当前用户有权查看。

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

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

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

    编辑:我可能需要使用'FieldCache'(提到here)将'有效'文档ID传递到lucene搜索?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

  

..所以搜索结果应该只有   显示发布内的页面   /到期窗口,'活跃'和那个   当前用户被授权   图。

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

至于“活跃” - 你能不能重建你的索引?只需在后台重建索引,并且只添加活动内容。你可能有太多的信息可以让它变得可行 - 但是Lucene非常快。

相关问题