2013-12-20 4 views
6

Sitecore CMS + DMS 6.6.0 rev.130404 => 7,0 rev.130424Обновление Sitecore конфигурации 6.6 индекс Sitecore 7 (с использованием ComputedFields)

В нашем проекте мы используем AdvancedDatabaseCrawler (АЦП) для наших индексов (особенно из-за его динамических полей). Вот конфигурация индекса пример:

<index id="GeoIndex" type="Sitecore.Search.Index, Sitecore.Kernel"> 
<param desc="name">$(id)</param> 
<param desc="folder">$(id)</param> 
<analyzer ref="search/analyzer" /> 
<locations hint="list:AddCrawler"> 
    <web type="scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler, scSearchContrib.Crawler"> 
    <database>web</database> 
    <root>/sitecore/content/Globals/Locations</root> 
    <IndexAllFields>true</IndexAllFields> 
    <include hint="list:IncludeTemplate"> 
     <!--Suburb Template--> 
     <suburb>{FF0D64AA-DCB4-467A-A310-FF905F9393C0}</suburb> 
    </include> 
    <dynamicFields hint="raw:AddDynamicFields"> 
     <dynamicField type="OurApp.CustomSearchFields.SearchTextField,OurApp" name="search text" storageType="NO" indexType="TOKENIZED" vectorType="NO" /> 
     <dynamicField type="OurApp.CustomSearchFields.LongNameField,OurApp" name="display name" storageType="YES" indexType="UN_TOKENIZED" vectorType="NO" /> 
    </dynamicFields> 
    </web> 
</locations> 
</index> 

Как вы можете видеть, мы используем scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler как искателем, и он использует поля, определенные в разделе <dynamicFields hint="raw:AddDynamicFields">, чтобы ввести пользовательские поля в индекс.

Теперь мы обновляем наш проект до sitecore 7. В Sitecore 7 они портировали функциональность DynamicFields из ADC в sitecore. Я узнал некоторые статьи об этом и преобразовал наши классы полей пользовательского поиска для реализации интерфейса sitecore 7 IComputedIndexField вместо наследования с класса BaseDynamicField в АЦП. Теперь моя проблема заключается в том, как изменить конфигурацию индекса в соответствии с новыми API-интерфейсами sitecore 7. В Интернете были биты и фрагменты, но не удалось найти все примеры, необходимые для преобразования моей конфигурации. Может ли кто-нибудь помочь мне в этом?

Пока я делаю это, у меня создается впечатление, что нам не придется перестраивать наши индексы, поскольку он все еще использует Lucene внутри. Я не хочу изменять структуру индекса. Просто хочу обновить код и конфигурацию от AdvancedDatabaseCrawler до Sitecore 7. Должен ли я беспокоиться о нарушении существующих индексов? Прошу пролить свет на это.

Благодаря

ответ

4

Мне удалось преобразовать конфигурацию индекса для Sitecore ContentSearch API. Если посмотреть на конфигурацию индекса Sitecore по умолчанию, это послужило большой поддержкой для этого.

Примечание: Как упоминалось также Stephen, <include hint="list:IncludeTemplate"> не работает в Sitecore 7.0 начального выпуска. Он исправлен в Sitecore 7.0 rev. 131127 (7.0 Update-3), и я планирую перейти на него.

Вот хорошая статья о sitecore 7 index update strategies от John West. Это поможет вам сконфигурировать ваши индексы так, как вы хотите.

Старинная конфигурация:

<sitecore> 
<contentSearch> 
    <configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration, Sitecore.ContentSearch.LuceneProvider"> 
    <DefaultIndexConfiguration type="Sitecore.ContentSearch.LuceneProvider.LuceneIndexConfiguration, Sitecore.ContentSearch.LuceneProvider"> 
     <IndexAllFields>true</IndexAllFields> 
     <include hint="list:IncludeTemplate"> 
     <!--Suburb Template--> 
     <suburb>{FF0D64AA-DCB4-467A-A310-FF905F9393C0}</suburb> 
     </include> 
     <fields hint="raw:AddComputedIndexField"> 
     <field fieldName="search text" storageType="NO" indexType="TOKENIZED" vectorType="NO">OurApp.CustomSearchFields.SearchTextField,OurApp</field> 
     <field fieldName="display name" storageType="YES" indexType="UN_TOKENIZED" vectorType="NO">OurApp.CustomSearchFields.LongNameField,OurApp</field> 
     </fields> 
    </DefaultIndexConfiguration> 
    <indexes hint="list:AddIndex"> 
     <index id="GeoIndex" type="Sitecore.ContentSearch.LuceneProvider.LuceneIndex, Sitecore.ContentSearch.LuceneProvider"> 
     <param desc="name">$(id)</param> 
     <param desc="folder">$(id)</param> 
     <!-- This initializes index property store. Id has to be set to the index id --> 
     <param desc="propertyStore" ref="contentSearch/databasePropertyStore" param1="$(id)" /> 
     <strategies hint="list:AddStrategy"> 
      <!-- NOTE: order of these is controls the execution order --> 
      <strategy ref="contentSearch/indexUpdateStrategies/onPublishEndAsync" /> 
     </strategies> 
     <commitPolicy hint="raw:SetCommitPolicy"> 
      <policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy, Sitecore.ContentSearch" /> 
     </commitPolicy> 
     <commitPolicyExecutor hint="raw:SetCommitPolicyExecutor"> 
      <policyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor, Sitecore.ContentSearch" /> 
     </commitPolicyExecutor> 
     <locations hint="list:AddCrawler"> 
      <crawler type="Sitecore.ContentSearch.LuceneProvider.Crawlers.DefaultCrawler, Sitecore.ContentSearch.LuceneProvider"> 
      <Database>web</Database> 
      <Root>/sitecore/content/Globals/Countries</Root> 
      </crawler> 
     </locations> 
     </index> 
    </indexes> 
    </configuration> 
</contentSearch> 
</sitecore> 
7

Несколько быстрых уточнений :)

Мы не слиты АЦП в Sitecore 7, ContentSearch слой представляет собой полностью переписанный старый слой результатов поиска для Sitecore. Мы взяли некоторые основные понятия из АЦП, такие как динамические поля, и поместили их в новую реализацию (как ComputedFields). Они не совместимы с 1: 1, и вам нужно будет немного поработать над вашими индексами.

Версия Lucene также была обновлена ​​с 2. * до 3.0.3, поэтому все индексы необходимо будет повторно создать, так как они являются совсем другой версией Lucene.

Существует два варианта: старый поиск Lucene (пространство имен Sitecore.Search) (на котором был построен ADC) не был затронут и будет работать по-разному, хотя я не уверен в совместимости с ADC с SItecore 7, так как теоретически это теперь было заменено.

Следующая опция - обновить свой индекс, чтобы воспользоваться преимуществами новых функций поиска Sitecore 7. Конфигурация, которую вы используете, не будет напрямую совместима, но, в то время как вам нужно будет переделать свой индекс в новую конфигурацию, базовая концепции должны быть вам знакомы. Динамические поля, которые у вас есть, должны логически сопоставляться с ComputedFields (поля, которые вычисляются при индексировании элемента), и все остальное прямолинейно.

Хотя это выглядит как много дополнительной конфигурации для ContentSearch, многие из них являются конфигурацией по умолчанию, которую вам не нужно касаться, вам просто нужно переопределить компоненты конфигурации для вычисленных полей, которые вы хотите добавить, и шаблон вы хотите включить.

Пример создания собственного конфигурации переопределение можно найти здесь: http://www.mikkelhm.dk/post/2013/10/12/Defining-a-custom-index-in-Sitecore-7-and-utilizing-it.aspx

Я также рекомендовал бы убедившись, что обновление до 7.0 об. 131127 (7.0 Update-3), поскольку это исправляет ошибку в логике IncludeTemplates в версии, которую вы в настоящее время имеете.

+0

спасибо Стивена! Мне удалось преобразовать конфигурации, посмотрев конфигурацию поиска sitecore, которая поставляется с sitecore и некоторыми экспериментами. Да, IncludeTemplates не работает, и я собираюсь обновиться до версии 7.0 Update-3. – ravinsp

Смежные вопросы