Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Lucene提高Sitecore中的性能_C#_Performance_Search_Lucene_Sitecore - Fatal编程技术网

C# 使用Lucene提高Sitecore中的性能

C# 使用Lucene提高Sitecore中的性能,c#,performance,search,lucene,sitecore,C#,Performance,Search,Lucene,Sitecore,我目前正在与Sitecore合作,在那里我们制作了一个“创建新内容”部分,它会打开一个弹出窗口,显示8个最常用的模板,以及使用次数 问题是,当前模板数量太多时需要花费太长时间,最高的模板数超过11k 下面是我用来获取8个最常用模板的代码: 我从数据库中获取所有项目 var allItems = db.GetItem("/sitecore/content").Axes.GetDescendants(); 然后我得到了最常用的8个 var mostUsedTemplates = allItems.

我目前正在与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 Powershell脚本,然后自动更新配置元素。计划脚本每天运行。

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

您可以在lucene中执行此操作,但这需要为模板本身编制索引,并添加一个包含模板实例计数的字段。看一看,让这更容易。但是,您需要按计划完全重建此索引,因为模板项永远不会重新编制索引,除非它们本身发生更改

链接数据库可能会让您获得更好的性能,因为模板的引用应该包含在其中。但是,您仍然需要遍历所有模板,并检查每个模板的引用数量

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


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

问题在于客户端想要使用Lucene。我在考虑另一种方法,我使用一个预定的任务,每小时更新一个表,其中有前8名,但他们不喜欢这个想法。他们只需要Lucene,并在每次按下按钮时进行查询。然后,您将需要创建一个仅包含模板的自定义索引,以及一个索引模板实例数的自定义字段。创建夜间计划的重建。看看scSearchContrib/Advanced Database Crawler,让它更简单。好的,我正在制作索引。问题有两个:1-我不知道如何设置配置,以便它搜索所有模板。2-如何计算一切。我是否需要在每个模板中添加一个字段,或者每个模板从我放置创建次数的位置继承的字段?再次,您应该看看scSearchContrib,因为它允许您将动态字段添加到索引中。问题是客户端希望使用Lucene。我在考虑另一种方法,我使用一个预定的任务,每小时更新一个表,其中有前8名,但他们不喜欢这个想法。他们只需要Lucene,每次按下按钮都会进行查询。然后,您需要创建一个自定义索引,其中只包含模板,以及一个自定义字段,用于索引数字
模板实例的数量。创建夜间计划的重建。看看scSearchContrib/Advanced Database Crawler,让它更简单。好的,我正在制作索引。问题有两个:1-我不知道如何设置配置,以便它搜索所有模板。2-如何计算一切。我需要在每个模板中添加一个字段,还是每个模板从我放置创建次数的位置继承的字段?再次,您应该看看scSearchContrib,因为它允许您将动态字段添加到索引中。