【发布时间】:2018-12-16 17:31:22
【问题描述】:
提高搜索性能。
我们目前在生产中使用 sitecore 8.1.3,并使用 Lucene Search 来进行搜索。我们将在不久的将来转向 SOLR 或 Coveo 搜索。也就是说,我们正在努力改进我们网站上的搜索功能。
在当前情况下,如果用户在我们的网站上进行搜索,Lucene 搜索会为我们提供来自 sitecore 内容项的适当搜索结果。结果是一个项目列表,其中一些具有演示详细信息,而有些没有演示详细信息(基本上是数据源项目,或拉入多列表字段项目)。我们直接向用户显示具有演示详细信息的结果,但是,数据源项目没有附加演示详细信息,因此对于此类项目,我们通过 sitecore 链接显示这些项目在演示详细信息中被称为数据源项目的项目或在多列表字段中引用。
我们正在使用Globals.LinkDatabase.GetItemReferrers(item, false) 方法来获取结果项所指的项。我们知道这种方法是一种沉重的方法。为了提高性能,我们正在过滤使用Globals.LinkDatabase.GetItemReferrers(item, false) 方法时返回的项目。我们仅选择项目的最新版本,仅当项目具有演示详细信息时才选择项目,仅当项目与上下文语言的语言相同时才选择。如果当前项目没有展示详情,它将使用相同的函数递归地搜索具有展示详情的相关项目。我们拥有的这种逻辑或代码可以帮助我们在一定程度上提高性能并产生所需的结果。
但是,如果搜索结果的数量很大,此代码会降低其性能。假设我搜索一个项目,其中 Lucene 搜索返回我说 10 个项目,然后我们的自定义搜索代码将产生我说 100 个相关项目(假设在结果中找到的项目的数据源项目可以在不同项目中重复使用) .当 Lucene 搜索提供大量结果(例如 500 个)时,性能会下降。在这种情况下,我们将在 500 个项目及其相关项目上递归运行我们的代码。为了获得更好的性能,我们尽可能使用 LINQ 查询而不是 foreach 迭代。代码工作得很好。我们确实得到了适当的结果,但是如果搜索项的计数很高,则搜索速度会变慢。想知道是否还有其他可以提高性能的地方。
【问题讨论】: