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

时间:2016-01-20 05:19:38

标签: azure solr lucene sitecore sitecore8

我们刚刚将7.2升级到8.1,它使用了lucene搜索提供程序。该网站在很大程度上依赖于lucene搜索和索引文章,以便它可以显示为列表。

我们已经安装了SOLR实例。我们需要将这个Lucene转换为SOLR。如果我在下面得到指示,我将不胜感激:

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

  2. 除了CORES和端点的配置外,是否有任何代码更改等我们需要注意?

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

  4. 更新

    我切换到SOLR。我可以重建所有CORES,web_index显示11K文档。但是该页面不会返回任何结果。下面是代码片段,如果我可以获得有关我做错的帮助,请欣赏。这对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 个答案:

答案 0 :(得分:4)

  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. 索引重建由您的配置设置。您可以设置一些索引更新策略:

    • manual:索引仅手动更新。
    • sync:修改,创建或删除项目时更新索引。这应该是内容创作服务器上主索引的默认值。
    • onPublishEndAsync:在发布作业完成后更新索引。
  4. 在多服务器设置中,例如:1个内容创作服务器和2个内容传送服务器。您应该设置内容创作服务器或专用索引服务器来执行索引更新。传递服务器应将所有索引的更新策略设置为手动。这会停止每个服务器多次构建索引。

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

    这应该让你了解差异。