【问题标题】:What should go in my Lucene document?我的 Lucene 文档中应该包含哪些内容?
【发布时间】:2009-04-27 15:34:43
【问题描述】:

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

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

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

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

另一方面,我将重复 CMS 数据库中已有的信息,因此我将冒着数据完整性的风险,并且只要上述列表中的任何内容更改为以及实际内容本身。

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

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

【问题讨论】:

    标签: asp.net lucene lucene.net


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      ..所以搜索结果应该只 显示发布中的页面 / 到期窗口,处于“活动”状态,并且 当前用户被授权 查看。

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

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

      【讨论】:

      • 我的偏好是使用 win 服务定期重建索引(lucene docs
      • 是的。无论如何都是愚蠢的要求 :) 除非您有机会定期更新您的索引 - 看起来您在将结果从索引中取出后被卡住了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多