“urllink”是Sitecore索引中的ComputedIndexField。
敌人的媒体项目,如果我重建索引,存储到索引中的网址以“/〜/ media / ...”开头,这是正确的。
但是如果索引策略是onPublishEndSync,并且我在我的媒体项目上重新发布,则网址以“/ sitecore / shell /〜/ media /...”开始。
我查了Sitecore源代码,区别在于Context.Site。重建索引时它为null,因此它使用“/”作为前缀。但在发布时它是“Sitecore shell”。因此它使用Sitecore Shell的Context.Site.VirtualFolder,即“/ sitecore / shell”。
我认为这是一个Sitecore错误。 ATM我想创建自己的urlLink ComputedIndexField类,并使用AbsolutePath = false的MediaUrlOptions作为修复。
只是想知道我是否遗漏了任何东西而且它实际上不是Sitecore的问题?
谢谢!
答案 0 :(得分:4)
只是为此提供更新。 Sitecore确认它是一个错误。他们正在找到一种解决方法,我会在这里更新。
感谢。
------------- 2014年12月15日更新----------------------
现在门票关闭了。 Sitecore的解决方案是删除这个" urlLink"未来的指数领域(他们说他们会要求这个)。
原因是LinkManager应该根据当前站点上下文生成url。但是,索引时站点上下文不存在(对于内容项,您可以检查路径,但对于媒体项,您不能)。
当然,另一种解决方案是创建自己的computeredField以覆盖媒体项的逻辑。但是,我同意Sitecore,从索引中删除此字段感觉更为正确。
最重要的是,使用urlLink字段的最初原因是在执行搜索时不再需要完全查询Sitecore。所有内容都来自Index的存储字段值。但另一方面,分页通常用于搜索结果,因此即使有对Sitecore的请求,它也不应该很多。
现在一切都好,很高兴看到更多意见和讨论,谢谢!