gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:40:08 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 查询实现起来 super 复杂。有没有人对更好的方法有任何建议?我是否应该只使用 Sitecore 查询来获取内容树中所有 session 的列表,然后遍历它们?

最佳答案

有一个 Lucene 的替代方案,可以替代您正在尝试做的事情。不过让我说清楚;我同意 Klaus 的观点,研究 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