2010-01-04 67 views
0

我有一個Sitecore內容結構,其中任何單個項目都可以有多個用於存儲列表的可枚舉內容(顯然是相當標準的方法)的子項目。我希望索引這些項目,但將其索引數據存儲在Lucene的父文檔中。這應該有希望加快搜索位,通過節省時間排序通過多個結果,所有結果都指向相同的URL。以下是我將實現的自定義索引器的一些基本代碼。Sitecore Lucene索引 - 在父Lucene中保存子字段值doc

任何人都可以讓我知道如果這是(一)可能和(二)一個好主意?我看到的主要問題是Lucene文檔看起來已經創建 - 我是否需要刪除它?另外,如果父項的Lucene文檔不存在,是否需要創建它?當父項被索引時,它會被覆蓋/丟失。看起來有點衝突的地方。

另一種選擇是,我不索引子項目,但獲得他們的價值,當我索引的父母。現在我想到了,這似乎是更好的方式去..意見?

public class CustomIndex : Sitecore.Data.Indexing.Index 
{ 
    public CustomIndex(string indexName): base(indexName) {} 

    protected override void AddFields(Item item, Document document) 
    { 
     //is item a sub-item (promo item) 
     if (...) 
     { 
      //delete the sub-item lucene doc 
      DeleteDoc(document); //is this possible or needed? 

      //get parent item 
      Item parentItem = item.Parent; 

      //get lucene document for parent item 
      Document parentDoc = GetParentDoc(); 

      //add fields to parent item lucene document 
      parentDoc.Add(...); 
      parentDoc.Add(...); 
     } 
     else 
     { 
      base.AddFields(item, document); 
     } 
    } 
} 

回答

2

是的我同意,選項#2更好 - 當你在父母身邊的時候索引孩子。主要是因爲不能保證遍歷的順序是什麼,所以文檔可能會按照您的說法重新創建。

+0

我同意你的意見。 您也可以決定重寫Sitecore.Search.Crawlers.DatabaseCrawler,以便您不必處理很多數據。 – 2010-01-04 09:44:52