0

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

a845497737704e8ab439dd410e7f1328|
0a2d7192f75148cca89b6df58fcf2e54|
204fce58c936434598f7bd7eccf11771

(忽略换行符)

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

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

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


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


有什么建议么?

4

4 回答 4

2

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

于 2009-05-11T14:01:51.063 回答
2

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

于 2009-05-11T14:07:39.723 回答
2

将 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

于 2009-05-11T14:57:43.477 回答
1

在标签字段上尝试此查询。

+(tag1 OR tag2 OR ... tagN) 

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

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

此外,您需要意识到,如果您想查找与 Doc1 的标签类似的文档,您会发现 Doc1 出现在搜索结果的顶部。因此,相应地处理这种情况。

于 2009-05-11T17:08:55.320 回答