2010-01-04 1 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, чтобы вам не пришлось обрабатывать много данных. –