2013-07-22 2 views
0

이전 Lucene 방식에서 Sitecore.Search를 사용하도록 코드를 변경하고 있습니다. 이렇게하려면 ADC module의 크롤러를 사용합니다. 나는 현재 Searcher를 사용하지 않고 있으며, 모듈의 크롤러 만 사용하고 있습니다 (나중에 단계적으로 변경하려고합니다).
나는 색인을 얻고 내 CM 환경에서 완벽하게 작동 기능을 검색하기 위해 관리했습니다,하지만 CD 환경은 내가 재건하려고 다음과 같은 오류를주고 계속 :CD 환경에서 검색 인덱스 재구성

구성 노드를 찾을 수 없습니다 : 데이터베이스/데이터베이스 [을 @ id = '코어']. 내가 검색 인덱스를 다시 실행하고있어 코드는 CD에

은 다음과 같습니다 CM에이 코드를 실행

foreach (var options in from ListItem item in cblIndexes.Items 
         where item.Selected   
         select new JobOptions("RebuildSearchIndex", "index", global::Sitecore.Client.Site.Name, new Builder(item.Value), "Rebuild") { AfterLife = TimeSpan.FromMinutes(1.0) }) 
      { 
       JobManager.Start(options); 
      } 

잘 작동합니다.
실패한 인덱스 중 하나에 대한 나의 구성 :

내가 솔루션이 Sitecore 6.3.1 여전히했다 Staging Guide 다시 겪었습니다
<search> 
     <configuration> 
     <indexes> 
      <index id="PressReleaseIndex" 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 ref="search/crawlers/PressReleaseIndex" param1="web" /> 
      </locations> 
      </index> 
     </indexes> 
     </configuration> 
     <crawlers> 
     <PressReleaseIndex type="scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler,scSearchContrib.Crawler"> 
      <Database>$(1)</Database> 
      <Root>/sitecore/content/home/newsroom</Root> 
      <IndexAllFields>false</IndexAllFields> 

      <include hint="list:IncludeTemplate"> 
      <pressrelease>{91DB1CBC-32F8-4344-A974-7F4FE5F07668}</pressrelease> 
      </include> 

      <include hint="list:IncludeField"> 
      <title>{F8C6E41E-3C9F-45F6-8409-61F5C8F2BF19}</title> 
      <shortdescription>{D25294E9-03C1-4E62-968B-5410AAAD0863}</shortdescription> 
      <body>{A0AD83E2-1099-407C-B8D7-C123FDAAD5DD}</body> 
      <releasedate>{D0B594BC-2ED6-4A0E-A050-3243CD044040}</releasedate> 
      </include> 

      <fieldCrawlers hint="raw:AddFieldCrawlers"> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.LookupFieldCrawler,scSearchContrib.Crawler" fieldType="Droplink" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.LookupFieldCrawler,scSearchContrib.Crawler" fieldType="Droptree" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.DateFieldCrawler,scSearchContrib.Crawler" fieldType="Datetime" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.DateFieldCrawler,scSearchContrib.Crawler" fieldType="Date" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.NumberFieldCrawler,scSearchContrib.Crawler" fieldType="Number" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.MultilistFieldCrawler,scSearchContrib.Crawler" fieldType="Multilist" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.MultilistFieldCrawler,scSearchContrib.Crawler" fieldType="Treelist" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.MultilistFieldCrawler,scSearchContrib.Crawler" fieldType="TreelistEx" /> 
      <fieldCrawler type="scSearchContrib.Crawler.FieldCrawlers.MultilistFieldCrawler,scSearchContrib.Crawler" fieldType="Checklist" /> 
      </fieldCrawlers> 

      <dynamicFields hint="raw:AddDynamicFields"> 
      <dynamicField type="Sapient.Practice.Ccmp.Common.SitecoreSearch.DynamicFields.ReleaseYearField,Sapient.Practice.Ccmp.Common" name="_releaseyear" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <dynamicField type="Sapient.Practice.Ccmp.Common.SitecoreSearch.DynamicFields.ReleaseMonthField,Sapient.Practice.Ccmp.Common" name="_releasemonth" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      </dynamicFields> 

      <fieldTypes hint="raw:AddFieldTypes"> 
      <!-- Text fields need to be tokenized --> 
      <fieldType name="single-line text" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="multi-line text" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="word document" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="html" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="rich text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="memo" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      <fieldType name="date" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" /> 
      </fieldTypes> 
     </PressReleaseIndex> 

(우리가 Sitecore 6.5 업데이트 5로 업그레이드), 모든 참조를 제거 Core 데이터베이스로 이동하십시오.

CD의 ShowConfig 페이지로 이동하여 'core'를 찾았지만 결과를 찾지 못했습니다. 또한 AppSettings.config, ConnectionStrings.config 또는 내가 가지고있는 다른 설정 파일에 코어 데이터베이스에 대한 참조가 없습니다. 내가 아는 한, 핵심 데이터베이스를 하드 코딩 된 것으로 참조하지 않습니다 (또는 그 전에 문제가 있었을 것입니다).

핵심 데이터베이스를 참조 할 위치를 파악할 수 없었습니다. 스택 트레이스와
완전한 예외 :

Exception: System.Reflection.TargetInvocationException 
Message: Exception has been thrown by the target of an invocation. 
Source: mscorlib 
    at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) 
    at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at Sitecore.Reflection.ReflectionUtil.InvokeMethod(MethodInfo method, Object[] parameters, Object obj) 
    at Sitecore.Reflection.MethodInstance.Invoke() 
    at Sitecore.Jobs.JobRunner.RunMethod(JobArgs args) 
    at (Object , Object[]) 
    at Sitecore.Pipelines.PipelineMethod.Invoke(Object[] parameters) 
    at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) 
    at Sitecore.Pipelines.CorePipeline.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists) 
    at Sitecore.Pipelines.CorePipeline.Run(String pipelineName, PipelineArgs args, String pipelineDomain) 
    at Sitecore.Jobs.Job.ThreadEntry(Object state) 

Nested Exception 

Exception: System.InvalidOperationException 
Message: Could not find configuration node: databases/database[@id='core'] 
Source: Sitecore.Kernel 
    at Sitecore.Diagnostics.Assert.IsTrue(Boolean condition, String format, Object[] args) 
    at Sitecore.Configuration.Factory.GetConfigNode(String xpath, Boolean assert) 
    at Sitecore.Configuration.Factory.CreateObject(String configPath, String[] parameters, Boolean assert) 
    at Sitecore.Configuration.Factory.CreateObject(String configPath, Boolean assert) 
    at Sitecore.Configuration.Factory.GetDatabase(String name, Boolean assert) 
    at Sitecore.Configuration.Factory.GetDatabase(String name) 
    at Sitecore.Web.UI.HtmlControls.Data.LookupSources.GetDatabase(String source) 
    at Sitecore.Data.Fields.CustomField.GetDatabase() 
    at Sitecore.Data.Fields.DelimitedField.ValidateLinks(LinksValidationResult result) 
    at Sitecore.Links.ItemLinks.AddLinks(Field field, List`1 links, ItemLinkState linkState) 
    at Sitecore.Links.ItemLinks.GetLinks(ItemLinkState linkState, Boolean allVersions, Boolean includeStandardValuesLinks) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.GetItemLinks(Item item) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddSpecialFields(Document document, Item item) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.IndexVersion(Item item, Item latestVersion, IndexUpdateContext context) 
    at scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler.IndexVersion(Item item, Item latestVersion, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddItem(Item item, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.Add(IndexUpdateContext context) 
    at Sitecore.Search.Index.Rebuild() 
    at Saga.Sitecore.Web.Builder.Rebuild() 
+0

코어 데이터베이스없이 CD 환경이 작동합니까? –

+0

예, 그렇습니다. 이것은 약 2 년 전에 행해졌 고 잘 작동했습니다. 따라서 가정하지 말아야합니다. – Trayek

+0

CD 및 CM 환경에 동일한 .NET Framework 버전이 설치되어 있습니까? 나는. 하나는 4를 갖고 다른 하나는 4.5를 가집니까? –

답변

1

이 문제는 특히 색인 구성과 관련이 있다고 생각하지 않습니다. 스택 추적을 보면, 예외는 정말로 Sitecore.Web.UI.HtmlControls.Data.LookupSources.GetDatabase 메소드에서 유래합니다. 검색 크롤러가 구분 된 필드 (멀티리스트, 트리리스트 등)에 대한 링크 (참조)를 얻으려고 할 때입니다.). 반사판을 사용하여

at Sitecore.Configuration.Factory.GetDatabase(String name) 
    at Sitecore.Web.UI.HtmlControls.Data.LookupSources.GetDatabase(String source) 
    at Sitecore.Data.Fields.CustomField.GetDatabase() 
    at Sitecore.Data.Fields.DelimitedField.ValidateLinks(LinksValidationResult result) 
    at Sitecore.Links.ItemLinks.AddLinks(Field field, List`1 links, ItemLinkState linkState) 
    at Sitecore.Links.ItemLinks.GetLinks(ItemLinkState linkState, Boolean allVersions, Boolean includeStandardValuesLinks) 
    at Sitecore.Search.Crawlers.DatabaseCrawler.GetItemLinks(Item item) 

, 우리는 관련된 필드는 "소스"필드에 값을 가지는 경우 LookupSources.GetDatabase 메소드를 호출하는 Sitecore.Data.Fields.CustomField.GetDatabase() 메소드를 볼 수 있습니다. LookupSources.GetDatabase 메서드는 "원본"필드를 구문 분석하여 연결된 구분 된 필드의 원본 항목을 쿼리 할 데이터베이스를 결정하려고 시도합니다. 일부 원본 필드는 "db ="매개 변수를 사용하여 소스 항목을 쿼리 할 데이터베이스를 명시 적으로 설정할 수 있습니다.

색인 설정에서 <IndexAllFields>true</IndexAllFields>을 사용하면 크롤러가 색인을 생성하려고 시도하는 입력란 중 하나에 핵심 Databasae에 대한 참조가 포함 된 '원본'입력란이 있습니다.

<IndexAllFields /> 값을 false로 설정 한 다음 명시 적으로 인덱스 필드를 포함 시키거나 제외시키는 방법은 분명 유효하지만 문제의 근본 원인을 추적하려면 "소스 "필드.

+0

코어 데이터베이스를 제거하지 않는 것이 좋습니다. 따라서 시간을 할 때마다 추가 할 것이라고 생각합니다. 문제는 저를 위해 제거 할 것입니다. Sitecore 지원부는이 도구를 사용하여 범인을 신속하게 검색 할 수 있다고 말했습니다. http://marketplace.sitecore.net/en/Modules/Sitecore_Support_Toolbox.aspx 아직 설치하지 않았지만 같은 문제가있는 다른 사람들을위한 링크를 삭제하겠다고 생각했습니다. :-) – Trayek

0

이 구성에 <IndexAllFields> 관련이있는 것으로 나타납니다. 나의 두 번째 색인은 이것을 사실로 설정했습니다. 내가 거짓으로 설정하면 IncludeFieldsExcludeFields이되었으며 이제는 성공적으로 구축됩니다.

여전히 오류가 발생하는 이유는 궁금합니다. Core 데이터베이스가 더 일찍 제거 되었기 때문입니다. 아마도 표준 필드일까요?

+0

예, 표준 필드 일 수 있습니다. 예외에는 Sitecore.Data.Fields.DelimitedField.ValidateLinks가 있고 Sitecore.Configuration.Factory.GetDatabase가 있습니다. 어쩌면 핵심 DB에서 항목에 대한 참조가있을 수 있습니다. –