我的索引文档有一个字段,其中包含一组以管道分隔的ID:
a845497737704e8ab439dd410e7f1328|
0a2d7192f75148cca89b6df58fcf2e54|
204fce58c936434598f7bd7eccf11771
(忽略换行符)
此字段代表标签列表。该列表可能包含 0 到 n 标记ID。
当我的网站用户查看特定文档时,我想显示相关文档的列表。 此相关文档列表必须由标记确定:
我正在考虑使用WildcardQuery,但不允许以'*'开头的查询。
有什么建议吗?
答案 0 :(得分:2)
在对文档编制索引时,您的以管道分隔的ID集应该已经分成单独的字段。这样,您可以简单地对所需标记进行查询,按相关性降序进行排序。
答案 1 :(得分:2)
您可以在文档中多次使用相同的字段。在这种情况下,您可以通过拆分|来在索引时添加多个“tag”字段。然后,当您搜索时,您只需要搜索“标记”字段。
答案 2 :(得分:2)
暂时搁置Lucene用于此任务的可能用途(我不太熟悉) - 考虑检查LinkDatabase。
Sitecore将在幕后跟踪您对项目的所有引用。并且由于您的多个标签确实(我假设)从某个地方表示为Sitecore Items的标签的元层次结构中选择 - LinkDatabase将能够告诉您引用它的所有项目。
在某种伪代码模型中,这将成为
for each ID in tags get all documents referencing this tag for each document found if master-list contains document; increase usage-count else; add document to master list sort master-list by usage-count descending
请原谅我,我不是更精确,但在现阶段无法模拟一个完整的例子。
您可以在此处找到有关LinkDatabase的文章http://larsnielsen.blogspirit.com/tag/XSLT。请注意,如果您使用TreeListEx字段标记文档,则早期版本的Sitecore中存在已知缺陷。记录在这里:http://www.cassidy.dk/blog/sitecore/2008/12/treelistex-not-registering-links-in.html
答案 3 :(得分:1)
在标记字段上尝试此查询。
+(tag1 OR tag2 OR ... tagN)
其中tag1,.. tagN是文档的标记。
此查询将返回至少包含一个标记匹配的文档。评分会自动显示最高分数的文件,因为最终分数是个别分数的总和。
此外,您需要意识到,如果您要查找类似于Doc1标签的文档,您会发现Doc1位于搜索结果的顶部。所以,相应地处理这个案子。