Sitecore 7.2 и SOLR: исключить клоны из веб-индекса

Я пытаюсь исключить все клоны из веб-индекса Sitecore. Я создал собственный поисковый робот, наследующий от Sitecore.ContentSearch.SitecoreItemCrawler переопределения метода IsExcludedFromIndex, с помощью следующего кода:

protected override bool IsExcludedFromIndex(SitecoreIndexableItem indexable, bool checkLocation)
{
    if (indexable.Item["Hide from Search"] == "1")
        return true;
    if (indexable.Item.IsClone)
        return true;
    return base.IsExcludedFromIndex(indexable, checkLocation);
}

Мое поле "Hide from Search" работает: любые элементы с этим набором полей не включаются в веб-индекс. Однако indexable.Item.IsClone никогда не бывает правдой, и все «клоны» остаются в веб-индексе.

Когда я запускаю главный индекс для этого искателя, IsClone истинно для каждого клона, и они не включаются в индекс. Я подозреваю, что это работает для главного, а не для веб-индекса, потому что клоны расширены для целей публикации (, как отметил Джон Уэст).

Приносим извинения, если этот вопрос считается дубликатом Глобально исключить клонированные элементы из индекса? - решение там не сработало для меня, и я использую SOLR (vs Lucene) и более новую версию Sitecore, поэтому я считаю, что это может быть отдельной проблемой.

Итак, как я могу исключить все клоны из индекса SOLR веб-базы данных Sitecore 7.2 (цели публикации)?


person thadmiller    schedule 13.02.2015    source источник


Ответы (1)


Как вы писали в своем вопросе, свойство IsClone не имеет отношения к опубликованным элементам, потому что Sitecore очищает значение поля __Source.

Вот почему не существует готового метода определения того, был ли элемент из веб-базы данных клоном или нет.

Вы можете использовать решение, предложенное Джоном Уэстом в его сообщении в блоге Определить клонированные элементы Sitecore ASPNET CMS Publishing Target Databases. В двух словах, вам нужно добавить свой процессор в конвейер публикации и сохранить значение поля __Source в другом настраиваемом поле или, по крайней мере, сохранить логическое значение в настраиваемом поле Is Cloned.

Затем вы можете использовать свой подход, просто вместо проверки IsClone вам нужно проверить, не пусто ли новое настраиваемое поле.

person Marek Musielak    schedule 13.02.2015
comment
Хотя это PITA, похоже, это решение, которое работает. Спасибо. - person thadmiller; 25.02.2015