【问题标题】:How to find related items by tags in Lucene.NET如何在 Lucene.NET 中通过标签查找相关项目
【发布时间】:2009-05-11 13:55:20
【问题描述】:

我的索引文档有一个字段,其中包含一组以竖线分隔的 id:

a845497737704e8ab439dd410e7f1328|
0a2d7192f75148cca89b6df58fcf2e54|
204fce58c936434598f7bd7eccf11771

(忽略换行符)

此字段表示标签列表。该列表可能包含 0n 个标记 ID。

当我网站的用户查看特定文档时,我想显示相关文档的列表。 此相关文档列表必须由标签确定:

  • 只有具有至少一个匹配标签的文档才能出现在“相关文档”列表中。
  • 具有最多匹配标签的文档应显示在“相关文档”列表的顶部。


我正在考虑为此使用 WildcardQuery,但不允许以 '*' 开头的查询。


有什么建议吗?

【问题讨论】:

    标签: search lucene sitecore


    【解决方案1】:

    暂时搁置 Lucene 可能用于此任务的用途(我不太熟悉) - 考虑查看 LinkDatabase。

    Sitecore 将在幕后跟踪您对项目的所有引用。而且由于您的多个标签确实(我假设)是从某处表示为 Sitecore 项目的标签的元层次结构中选择的 - LinkDatabase 将能够告诉您引用它的所有项目。

    在某种伪代码模型中,这会变成

    对于标签中的每个 ID 获取所有引用此标签的文档 对于找到的每个文档 如果主列表包含文档;增加使用次数 别的;将文档添加到主列表 按使用计数降序对主列表进行排序

    请原谅我没有更精确,但在这个阶段无法模拟一个完整的工作示例。

    您可以在此处http://larsnielsen.blogspirit.com/tag/XSLT 找到有关 LinkDatabase 的文章。请注意,如果您使用 TreeListEx 字段标记文档,则在早期版本的 Sitecore 中存在一个已知缺陷。记录在这里:http://www.cassidy.dk/blog/sitecore/2008/12/treelistex-not-registering-links-in.html

    【讨论】:

    • @Mark Cassidy:我之前没有使用过链接数据库,但我会尝试你的方法。
    • 我写了一篇完整的文章,其中包含了这个伪代码的实现——如果没有其他原因,只是为了对自己断言,它可以按照我设想的方式完成 ;-) 你可以在这里找到它:cassidy.dk/blog/sitecore/2009/05/…
    【解决方案2】:

    当文档被索引时,您的管道分隔的 id 集确实应该被分成单独的字段。这样,您可以简单地查询所需的标签,按相关性降序排序。

    【讨论】:

    • 这不太实用,因为列表可能包含 0 到 n 个 ID
    • @ArnieZ:请与我裸露。什么不实用?
    • @Adam Paynter:如果有 20 个标签怎么办?然后我必须搜索 20 个字段吗?
    • @ArnieZ:在构造 BooleanQuery 时,您可以指定子句(在这种情况下为 TermQuery)是否必须、不得或应该存在。如果在构建 BooleanQuery 时使用 SHOULD,Lucene 仍然会找到该文档,即使它的 20 个标签中只有一个匹配。它只会比匹配其 20 个标签中的 2 个的文档得分低,等等...
    • @ArnieZ:我注意到对 Mike 的回答的评论。我只是想澄清一下:我的意思是管道分隔的 id 将被分成多个字段,所有字段都具有相同的字段名称。
    【解决方案3】:

    您可以在一个文档中多次使用相同的字段。在这种情况下,您可以通过在 | 上拆分在索引时添加多个“标签”字段。然后,当您搜索时,您只需在“标签”字段上进行搜索。

    【讨论】:

    【解决方案4】:

    在标签字段上试试这个查询。

    +(tag1 OR tag2 OR ... tagN) 
    

    其中 tag1, .. tagN 是文档的标签。

    此查询将返回至少有一个标签匹配的文档。评分会自动显示匹配次数最多的文档,因为最终分数是单个分数的总和。

    另外,您需要意识到,如果您想查找与 Doc1 标签相似的文档,您会发现 Doc1 位于搜索结果的顶部。所以,相应地处理这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-03
      • 2011-01-10
      • 2014-03-31
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多