“urllink”是 Sitecore 索引中的 ComputedIndexField。
对媒体项目,如果我重建索引,则存储到索引中的 url 以“/~/media/...”开头,这是正确的。
但是,如果索引策略是 onPublishEndSync,并且我在我的媒体项目上重新发布,则 url 以“/sitecore/shell/~/media/...”开头。
我检查了 Sitecore 源代码,区别在于 Context.Site。重建索引时它为空,因此它使用“/”作为前缀。但在发布时它是“Sitecore shell”。因此它使用了 Sitecore Shell 的 Context.Site.VirtualFolder,即“/sitecore/shell”。
我认为这是一个 Sitecore 错误。 ATM 我想创建我自己的 urlLink ComputedIndexField 类并使用 MediaUrlOptions 和 AbsolutePath=false 作为修复。
只是想知道我是否遗漏了什么,这实际上不是 Sitecore 的问题?
谢谢!
最佳答案
只是为了提供更新。 Sitecore 确认这是一个错误。他们正在寻找解决方法,他们这样做时我会在这里更新。
谢谢。
-------------更新于 15/12/2014--------------
票已经关了。 Sitecore 的解决方案是将来从索引中删除这个“urlLink”字段(他们说他们会要求这样做)。
原因是 url 应该由 LinkManager 根据当前站点上下文生成。但是,索引时站点上下文不存在(对于内容项,您可以检查路径,但对于媒体项,则不能)。
当然还有另一种解决方案是创建您自己的 computeredField 来覆盖媒体项的逻辑。不过我同意 Sitecore,从索引中删除这个字段感觉更合适。
最重要的是,使用 urlLink 字段的最初原因是在进行搜索时完全不需要查询 Sitecore。所有内容都来自索引的存储字段值。但另一方面,分页通常用于搜索结果,因此即使有对 Sitecore 的请求,也不应该太多。
暂时就这么多了,欢迎大家多多交流讨论,谢谢!
关于search - Sitecore 索引中的 urllink 返回带有 "/sitecore/shell/~/media/..."的媒体 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27272832/