Sitecore 8.1:将 Lucene 搜索转换为 Solr 的步骤

Sitecore 8.1 : Steps for converting the Lucene Search to Solr

我们刚刚将 7.2 升级到使用 lucene 搜索提供程序的 8.1。该网站严重依赖 lucene 来搜索和索引文章,以便它可以显示为列表。

我们已经有一个 SOLR 实例设置。我们需要将此 Lucene 转换为 SOLR。如果我在下面得到指导,将不胜感激:

  1. 我们如何将自定义计算的 Lucene 索引和字段转换到 Solr?

  2. 除了CORES和端点上的配置,还有什么需要注意的代码改动等吗?

  3. 索引重建事件在 SOLR 方面是如何工作的。他们(CD)是否都尝试构建一次或按顺序构建或只有一个触发构建。

更新:

我切换到 SOLR。我可以重建所有 CORES 并且 web_index 显示 11K 文档。但是该页面没有 return 任何结果。下面是代码片段,如果我能就我做错的事情获得帮助,我将不胜感激。这在 Lucene 中运行良好:

public IEnumerable<Article> GetArticles(Sitecore.Data.ID categoryId)
        {
            List<Article> articles = null;

            var home = _sitecoreService.GetItem<Sitecore.Data.Items.Item>(System.Guid.Parse(ItemIds.PageIds.Home));

            var index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(home));

            using (var context = index.CreateSearchContext(SearchSecurityOptions.DisableSecurityCheck))
            {
                var query = context.GetQueryable<ArticleSearchResultItem>().Filter(item => item.Category == categoryId);

                var results = query.GetResults();

                articles = new List<Article>();

                foreach (var hit in results.Hits)
                {
                    var article = _sitecoreService.GetItem<Article>(new Sitecore.Data.ID(hit.Document.Id).ToGuid());

                    if (article != null)
                    {
                        if (article.ArticlePage != null && !article.ArticlePage.HideInNavigation)
                        {
                            articles.Add(article);
                        }
                    }
                }
            }

            return articles;
        }
  1. 计算字段的实际代码可能不会更改。您需要对其进行测试以确保,但由于 Sitecore 抽象出 Lucene 和 SOLR 代码,只要您只是使用 Sitecore API 它就应该可以工作。 您将需要更改配置。在 Lucene 索引中,您将计算字段添加到 defaultLuceneIndexConfiguration 部分。这将需要更改为 defaultSolrIndexConfiguration

  2. 同样,只要您让我们专门使用 Sitecore API 而不是直接使用 Lucene.net 或 Solr.net - 大多数代码应该可以正常工作。我发现了一些问题。

    • Lucene 区分大小写,SOLR 区分大小写。因此,一些可能在 Lucene 上运行良好的查询可能因为区分大小写而不再运行。
    • 注意未设置 .Take() 限制的查询。 Sitecore 确实有一个查询返回的最大行数的默认值,但在 SOLR 上,由于网络往返,它对查询时间的影响可能比对 Lucene 的影响大得多。
    • 使用 SOLR 时要考虑的另一件事是发生的搜索次数。使用 Lucene,对索引进行许多小的调用几乎没有影响,因为它在本地和磁盘上的速度非常快。使用 SOLR,这些调用会变成网络流量,因此对索引的大量微调用会对性能产生很大影响。
    • 如 mikaelnet 所述:SOLR 在索引中使用动态字段。所以每个字段都有一个基于字段类型的后缀。这在 大多数 情况下应该不是问题。 Sitecore API 会自动将后缀附加到您拥有的任何 IndexField 属性。但有时,它可能会导致映射错误,您可能需要围绕该问题进行编码。
  3. 索引重建由您的配置设置。您可以设置一些索引更新策略:

    • 手动:索引只能手动更新。
    • sync:索引在项目被修改、创建或删除时更新。这应该是内容创作服务器上主索引的默认设置。
    • onPublishEndAsync:这会在发布作业完成后更新索引。

在 multi-server 设置中,例如:1 台内容创作服务器和 2 台内容分发服务器。您应该设置内容创作服务器或专用索引服务器来执行索引更新。交付服务器应将所有索引的更新策略设置为手动。这会阻止每个服务器多次构建索引。

有一些关于使用 Sitecore 设置 SOLR 的好文章。以供参考: * http://www.sequence.co.uk/blog/sitecore-8-and-solr/

这应该让您了解差异。