我使用Lucene.net在我们的CMS上索引内容和文档等。到目前为止,这种方法运作良好,但现在我必须考虑到以下对网页的补充:
因此,搜索结果应仅显示“发布/过期”窗口内的页面,“活动”且当前用户有权查看。
我应该在Lucene索引中包含上述信息吗?它会使查询变得更复杂,但是hits集合只返回“有效”文档,这将使分页结果变得更加容易。
另一方面,我将重复已经存在于CMS数据库中的信息,因此我将面临数据完整性的风险,并且只要上述列表中的任何内容发生更改,我就会更新索引。以及实际内容本身。
其他人有这个问题吗?你是怎么解决的?感谢。
编辑:我可能需要使用'FieldCache'(提到here)将'有效'文档ID传递到lucene搜索?
答案 0 :(得分:1)
首先查询CMS数据库,然后构建一个包含所有匹配文档的BitSet(您需要一个FieldCache来在您的应用程序的文档ID与Lucene的内部文档ID之间进行转换)。然后,您可以使用Filter(包装BitSet)在索引上运行Lucene查询。
您将所有可变数据保存在数据库中(它所属的位置),您不必担心更新或重建索引。这也会非常快。
P.S。我只使用了Lucene的Java版本,但这在Lucene.NET中应该可以正常工作
答案 1 :(得分:0)
..所以搜索结果应该只有 显示发布内的页面 /到期窗口,'活跃'和那个 当前用户被授权 图。
有几种方法可以处理授权问题。您可以维护多个索引(每个权限级别一个),使用查询过滤结果(通过存储所需权限)或在显示结果之前过滤结果。如果只有几个级别,我认为我会维护单独的索引 - 这似乎是最安全的。
至于“活跃” - 你能不能重建你的索引?只需在后台重建索引,并且只添加活动内容。你可能有太多的信息可以让它变得可行 - 但是Lucene非常快。