Sitecore索引中的urllink返回带有"/ sitecore/shell /〜/ media/..."的媒体网址

zha*_*nke 9 media indexing search sitecore sitecore7

"urllink"是Sitecore索引中的ComputedIndexField.

如果我重建索引,那么存储到索引中的URL会以"/〜/ 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的问题?

谢谢!

zha*_*nke 5

只是为了提供更新。Sitecore 确认这是一个错误。他们正在寻找解决方法,他们这样做时我会在这里更新。

谢谢。

-------------更新于 15/12/2014--------------

票已经关了。Sitecore 的解决方案是将来从索引中删除这个“urlLink”字段(他们说他们会要求这样做)。

原因是 url 应该由 LinkManager 根据当前站点上下文生成。但是,索引时站点上下文不存在(对于内容项,您可以检查路径,但对于媒体项,则不能)。

当然还有另一种解决方案是创建您自己的 computeredField 来覆盖媒体项的逻辑。不过我同意 Sitecore,从索引中删除这个字段感觉更合适。

最重要的是,使用 urlLink 字段的最初原因是在进行搜索时完全不需要查询 Sitecore。所有内容都来自索引的存储字段值。但另一方面,分页通常用于搜索结果,因此即使有对 Sitecore 的请求,也不应该太多。

暂时就这么多了,欢迎大家多多交流讨论,谢谢!

  • 那么,如果我想要索引中的图像的 URL,该怎么办?我正在使用 Sitecore 7.5,我希望在索引中包含一个计算字段,该字段返回指向较大图像的较小版本的链接(用于搜索结果)。这是我在计算字段中使用的代码: return HashingUtils.ProtectAssetUrl(Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl( ((ImageField)myItem.Fields["Hi Res Image) "]).MediaItem)) + "?w=266&h=266"); (2认同)