У меня есть структура контента 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);
}
}
}
Я согласен с вами. Вы также можете переопределить файл Sitecore.Search.Crawlers.DatabaseCrawler, чтобы вам не пришлось обрабатывать много данных. –