2010-01-04 68 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