代码之家  ›  专栏  ›  技术社区  ›  Roman

如何索引论坛讨论以进行搜索?

  •  2
  • Roman  · 技术社区  · 14 年前

    对于一个讨论论坛来说,将讨论线程中的每个条目作为单独的lucene文档进行索引,还是将讨论中的所有条目简单地合并为一大块文本,并将整个讨论线程作为单个lucene文档进行索引,效果更好?

    4 回复  |  直到 14 年前
        1
  •  1
  •   athena    14 年前

    取决于你在寻找什么样的搜索功能。例如,如果您希望用户能够搜索在某个特定日期出现在线程中的关键字,那么您必须将所有条目作为带有日期(例如 NumericField 可使用 NumericRangeFilter ).

    将每个条目作为一个单独的文档进行索引还将使您能够使用Lucene scorers对每个条目进行评分,这将有助于检索最相关的条目(而不是线程)作为对查询的响应。此外,还可以将线程主题作为单独的字段添加到每个条目文档中(代价是占用更多的空间)。

    如果您想将用户指向感兴趣的确切条目,那么连接所有条目不是一个好主意。 至于您对从同一个线程返回多个条目的担忧(对Ryan的回答的评论),您可以在索引时为每个条目添加一个线程id。然后在显示结果时,只能显示每个线程id的条目(得分最高的条目可以与线程主题一起显示)

        2
  •  0
  •   Ryan Ternier    14 年前

    如果将讨论中的所有条目串联在一起,则会出现错误,无法精确指出要检索的条目。

    Lucene应该能够快速索引和搜索每个条目(post/thread/whatever)。把它们混在一起似乎太过分了。

        4
  •  0
  •   Sheng Chien    14 年前

    我更愿意为每个条目分别编制索引。它将使设计更加灵活,因为您的系统应该有某种主题实体来对同一线程中的条目进行分组。使用串联索引的另一个问题是,一旦发布了新条目,就需要重新索引,这会影响性能。