gpt4 book ai didi

sitecore - 如何使用 contains 参数从 Sitecore 选择内容项。 Sitecore 查询很慢

转载 作者:行者123 更新时间:2023-12-02 21:37:39 25 4
gpt4 key购买 nike

我有一个名为“ session ”的 Sitecore 数据模板。它有一个名为“附加事件”的字段。该字段是一个多列表,允许内容编辑者将许多不同的事件与 session 相关联。我的 session 内容项并非全部位于内容树中的同一文件夹中。它们分布在整个网站上。给定特定事件,我需要能够查找并显示该事件的所有关联 session 的列表。现在我正在使用 Sitecore 查询,如下所示:

/Sitecore/Content/Home//*[(@@templatename='Meeting') and (contains (@@#Additional Activities#, '{C73FAE38-DBF5-42C9-B872-8E412B99E9DE}'))]

这可行,但速度非常慢。我考虑过创建某种可以查询的内存缓存,但后来我遇到了何时重建缓存的问题。我也想过使用 Lucene,但我发现 Lucene 查询实现起来非常复杂。有人对更好的方法有什么建议吗?我是否应该使用 Sitecore 查询来获取内容树中所有 session 的列表,然后迭代它们?

最佳答案

对于您正在尝试做的事情,有一个 Lucene 的替代方案。不过,让我说清楚;我同意克劳斯的观点,研究 Lucene 是推荐的路线。话虽如此;这是一个替代版本。对于您想要做的事情,您可以使用 Sitecore LinkDatabase。只要您只想查找引用特定事件的 session ,它就能满足您的需要。

代码看起来像这样:

       Item activityTemplate = Sitecore.Context.Database.GetItem( "/sitecore/templates/path/to/your/activity/template" );
var links = new List<ItemLink>( Globals.LinkDatabase.GetItemReferrers( activityTemplate, false ) );
List<ItemLink> filteredLinks = links.FindAll( il => il.SourceDatabaseName == Sitecore.Context.Database.Name );

// filtered links is now a list of all references to your activity
foreach ( ItemLink fl in filteredLinks )
{
Item si = fl.GetSourceItem();

// Check if the reference is a meeting item
if ( si.TemplateID == Sitecore.Data.ID.Parse( "{0E06BFCA-3595-4F31-BDBF-746EE6663B4A}" ) && si.Paths.FullPath.StartsWith( "/sitecore/content" ) )
{
// si is your meeting item
Response.Write( si.Paths.FullPath + "<br />" );
}
}

此查询的执行时间与 Lucene 等效查询一样快(可能稍快),而且绝对比原始 Sitecore 查询更快。

关于sitecore - 如何使用 contains 参数从 Sitecore 选择内容项。 Sitecore 查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com