使用Lucene提高Sitecore的性能

本文关键字:性能 Sitecore 提高 Lucene 使用 | 更新日期: 2023-09-27 18:00:37

我目前正在Sitecore工作,我们在那里制作了一个"创建新内容"部分,该部分打开一个弹出窗口,显示了8个最常用的模板和使用次数。

问题是,当模板数量太高时(目前,最高的模板数量超过11k),需要太长时间。

以下是我用来获得8个最常用模板的代码:

我从数据库中获取所有项目。

var allItems = db.GetItem("/sitecore/content").Axes.GetDescendants();

然后我得到了最常用的8个。

var mostUsedTemplates = allItems.GroupBy(x => x.TemplateID)
                .Select(x => new { TemplateID = x.Key, Count = x.Count() })
                .OrderByDescending(x => x.Count).Take(8);

我们已经实现了Lucene,我真的不知道如何使用它

我试着寻找获得所有模板的方法,对它们进行计数,然后获得最常用的8个模板,但我一无所获。

简而言之,我需要计算用于创建内容中项目的所有模板,并恢复计数最高的8个模板。

如有任何帮助,我们将不胜感激。谢谢

对此进行扩展:这是我目前正在进行的配置。我正在尝试包括所有的模板,并能够对它们进行计数。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<search>
  <configuration>
    <indexes>
      <index id="usage_template_count" type="Sitecore.Search.Index, Sitecore.Kernel">
        <param desc="name">$(id)</param>
        <param desc="folder">usage_template_count</param>
        <Analyzer ref="search/analyzer" />
        <locations hint="list:AddCrawler">   
        For what I understand, here is what I specify what to index.
        From what I read, I know how to include some templates, or excludes others, but no idea how to include ALL.
        Also don´t know if I have to set up something in the config to be able to count the results.
        </locations>
      </index>
    </indexes>
  </configuration>
</search>
</sitecore>
</configuration>   

再次感谢!

使用Lucene提高Sitecore的性能

首先,不要迭代或检索整个内容树并期望它执行。这不是一个合理的期望。

您可以在lucene中这样做,但这需要对模板本身进行索引,并添加一个包含模板实例计数的字段。(请查看scSearchContrib以简化此操作。)但是,您需要对该索引进行计划的完全重建,因为除非模板项本身发生更改,否则它们永远不会重新索引。

LinksDB可能会为您带来更好的性能,因为那里应该包含对模板的引用。然而,您仍然需要遍历所有模板,并检查每个模板的引用数量。

对于这两种解决方案,我肯定仍然建议实现缓存层。

然而,最终,为什么有必要动态地这样做呢?安装中最常用或最有用的八个模板会经常更改吗?为什么不在内容树中的某个位置为此创建一个配置元素,并根据模板使用情况的报告定期更新它呢?您可以使用类似Sitecore Powershell控制台的东西来运行报告。如果您真的需要自动化它,请编写一个Sitecore Powershell脚本来执行查询,然后自动更新您的配置元素。安排脚本每天运行。