【问题标题】:Using Lucene to improve performance in Sitecore使用 Lucene 提高 Sitecore 的性能
【发布时间】:2013-02-06 23:55:31
【问题描述】:

我目前正在使用 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>   

再次感谢!

【问题讨论】:

    标签: c# performance search lucene sitecore


    【解决方案1】:

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

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

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

    无论使用哪种解决方案,我都绝对推荐实现缓存层。

    最后,为什么需要动态地执行此操作?安装中最常用或最有用的八个模板会经常更改吗?为什么不为此在内容树的某处创建一个配置元素,并根据模板使用报告定期更新它?您可以使用Sitecore Powershell Console 之类的东西来运行报告。如果您确实需要自动化,请编写一个 Sitecore Powershell 脚本来执行查询,然后自动更新您的配置元素。安排脚本每天运行。

    【讨论】:

    • 问题是客户端要使用Lucene。我正在考虑另一种方法,我使用计划任务保持每小时更新前 8 名的表格,但他们不喜欢这个想法。他们只想要 Lucene,并在每次按下按钮时进行查询。
    • 然后您需要创建一个仅包含模板的自定义索引,以及一个用于索引模板实例数量的自定义字段。创建每晚计划的重建。看看 scSearchContrib/Advanced Database Crawler 以使这更容易。 github.com/sitecorian/SitecoreSearchContrib
    • 好的,我正在制作索引。问题是两件事: 1 - 我不知道如何设置配置,所以它搜索所有模板。 2 - 如何计算一切。我是否需要在每个模板(或每个模板继承的模板)中添加一个字段,其中我放置了它的创建次数?
    • 再一次,您应该查看 scSearchContrib,因为它允许您向索引添加动态字段。
    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2016-11-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多