首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用contains参数从Sitecore中选择内容项。Sitecore查询速度非常慢

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

Stack Overflow用户
提问于 2014-01-09 05:23:10
回答 3查看 4.6K关注 0票数 2

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

代码语言:javascript
复制
/Sitecore/Content/Home//*[(@@templatename='Meeting') and (contains (@@#Additional Activities#, '{C73FAE38-DBF5-42C9-B872-8E412B99E9DE}'))]

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

EN

回答 3

Stack Overflow用户

发布于 2014-01-09 17:27:30

除了Lucene之外,还有一种方法可以替代你想要做的事情。不过,让我澄清一下;我同意Klaus的观点,研究Lucene是推荐的路线。话虽如此,这里有一个替代版本。对于您正在尝试执行的操作,您可以使用Sitecore LinkDatabase。只要您只查找引用特定活动的会议,它就可以帮您完成此任务。

代码将如下所示:

代码语言:javascript
复制
       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查询快。

票数 3
EN

Stack Overflow用户

发布于 2014-01-09 06:33:50

使用所有会议项目的索引来查询Lucene是可行的。

会很快的。你用的是Sitecore 7还是6?我猜标签是6,所以使用marketplace的高级数据库爬虫来建立索引,查询应该非常简单。

票数 1
EN

Stack Overflow用户

发布于 2014-01-09 07:26:31

根据您的Sitecore版本,您还可以使用快速查询:

代码语言:javascript
复制
query:fast:/Sitecore/Content/Home//*[@@templatename='Meeting' 
       and @@#Additional Activities#='%{C73FAE38-DBF5-42C9-B872-8E412B99E9DE}%'] 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21006818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档