2016-01-20 59 views
0

我們剛剛將我們的7.2升級到了使用lucene搜索提供程序的8.1。該網站嚴重依賴lucene搜索和索引文章,以便它可以顯示爲列表。Sitecore 8.1:將Lucene搜索轉換爲Solr的步驟

我們已經有了SOLR實例設置。我們需要將這個Lucene轉換爲SOLR。如果我在下面獲得方向,將欣賞:

  1. 我們如何將自定義計算的lucene索引和字段轉換爲Solr?

  2. 除了CORES和端點上的配置之外,是否有任何代碼更改等,我們需要注意?

  3. 索引重建事件如何根據SOLR工作。他們(CD)是否都試圖構建一次或依次構建或只構建一個觸發器。

UPDATE:

我切換到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; 
     } 

回答

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:這會在發佈作業完成後更新索引。

在多服務器設置,例如:1個內容創作服務器和2臺內容傳送服務器。您應該設置內容創作服務器或專用索引服務器來執行索引更新。交付服務器應該爲所有索引設置更新策略爲手動。這會停止每個服務器多次構建的索引。

有一些關於使用Sitecore設置SOLR的好文章。作爲參考: * http://www.sequence.co.uk/blog/sitecore-8-and-solr/

這應該給你一個差異的想法。

+0

好總結!字段映射也可能需要修改,以便正確執行詞幹分析。當使用動態字段時,它們通常在Solr中被命名爲「mystring_s」,「myint_i」等,因此[IndexField]屬性也可能需要修改。 – mikaelnet

+0

好點 - 我會更新我的答案:) –

+0

'[IndexField]'屬性應該沒問題。 Sitecore API會將後綴追加到字段名稱上。 –