Поддержание Sitecore Lucene в актуальном состоянии - PullRequest
2 голосов
/ 14 сентября 2010

У меня есть приложение Sitecore, которое создает и использует несколько индексов Lucene через встроенный API Sitecore.

Мне нужно убедиться, что элементы в индексе обновляются после их публикации. Для этого я создал Sitecore Hook, который определяет, когда и элемент сохраняется в базе данных «web», и переиндексирует элемент. Похоже, что он работает по большей части, но время от времени он необъяснимым образом терпит неудачу.

Код, который я имею в хуке, выглядит так:

item.Database.Indexes.RemoveItem(item, true);
item.Database.Indexes.UpdateItem(item);

Кто-нибудь когда-нибудь пробовал это раньше и нашел лучшее решение?

Ответы [ 3 ]

4 голосов
/ 15 сентября 2010

Фрагмент конфигурации HistoryEngine:

<Engines.HistoryEngine.Storage>
    <obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel">
        <param connectionStringName="$(id)" />
        <EntryLifeTime>30.00:00:00</EntryLifeTime>
    </obj>
</Engines.HistoryEngine.Storage>

Согласно этому документу SDN (PDF) , каждый раз, когда Sitecore вносит изменения в элемент, он добавляет запись в таблицу базы данных.Однако по умолчанию Sitecore не сделает этого, если вы не включите приведенный выше фрагмент в раздел <database> в файле web.config для базы данных, которую вы хотите проиндексировать.

1 голос
/ 15 сентября 2010

Вероятно, я бы хотел подключить Sitecore History Engine к вашей "веб" базе данных, поскольку она уже предназначена для "master".Благодаря этому индексация измененного содержимого будет выполняться автоматически.

Сейчас я не на компьютере, где я могу привести полный пример, но вы сможете найти нужную конфигурацию в разделе "master".определение базы данных в вашем файле web.config.

0 голосов
/ 10 марта 2011

Если вы используете один экземпляр Sitecore для обслуживания вашего сайта, то индексы Lucene в веб-базе данных автоматически обновляются при публикации элемента. [ РЕДАКТИРОВАТЬ: Прочитав документ, на который ссылается Кайл в своем ответе, я собираюсь перепроверить, что это не зависит от механизма истории, который я добавляю в проекты как само собой разумеющееся. ]

Если вы используете старую версию Sitecore (6.2 или ниже) и используете промежуточный модуль для обслуживания одного / нескольких интерфейсных серверов и сервера авторинга, вам нужно добавить HistoryEngine на веб-базу данных (или какую-либо цель публикации, которую вы используете) и установите для параметра Indexing.ServerSpecificProperties значение true (я не уверен, в какой версии этот параметр был введен - если вы его не видите, возможно, стоит подумать об обновлении если возможно).

Если вы используете Sitecore 6.3 или выше, я считаю (и я еще не проверял это), что экземпляры компакт-диска должны автоматически переиндексировать контент после публикации с сервера CM, как если бы это был единственный экземпляр из-за на синдикацию событий. Я проверю это позже.

Для всех, кто интересуется, что такое HistoryEngine, это действительно очень простой журнал того, что изменилось в базе данных и когда. Всякий раз, когда что-то меняется, событие записывается там. Это позволяет экземплярам до 6.3 держать под контролем то, что изменилось, когда они отключены от экземпляра создания контента. Если вам интересно, включите его и посмотрите на таблицу History в базе данных.

...