1
votes

I upgraded sitecore from 6.6 to 7.0. In the process I upgraded all projects in the solution to .net framework 4.5 and also upgraded all the nuget packages.

After upgrade I am able to build my solution and browse the website but getting runtime error when come across sitecore search related features.

So I am getting error in following scenarios: 1. when performing any search in sitecore console. 2. when performing any search from website.

Project has custom search functionality.

Getting following error:

Server Error in '/' Application.

Field not found: 'Store.YES'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more  information about the error and where it originated in the code. 

Exception Details: System.MissingFieldException: Field not found: 'Store.YES'.

Source Error: 


Line 36:                 return new List<Item>();
Line 37: 
Line 38:             var searchIndex = SearchManager.GetIndex(_options.Database.Name.ToLower());
Line 39:             using (var context = searchIndex.CreateSearchContext())
Line 40:             {

Source File: c:\Gexa\Source\Customer Care\External Web\KStreet\DEV - SmallComm\GexaNes.Services\SearchService\SiteSearcher.cs    Line: 38 

Stack Trace: 


[MissingFieldException: Field not found: 'Store.YES'.]
   scSearchContrib.Crawler.SearchField.SetStorageType(String storageType) +0
   scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler.AddFieldTypes(XmlNode configNode) +470

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0
   System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +92
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +108
   Sitecore.Configuration.Factory.AssignProperties(Object obj, Object[] properties) +571
   Sitecore.Configuration.Factory.AssignProperties(XmlNode configNode, String[] parameters, Object obj, Boolean assert, Boolean deferred, IFactoryHelper helper) +523
   Sitecore.Configuration.Factory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper) +198
   Sitecore.Configuration.Factory.CreateObject(String configPath, String[] parameters, Boolean assert) +298
   Sitecore.Configuration.Factory.CreateFromReference(XmlNode configNode, String[] parameters, Boolean assert) +91
   Sitecore.Configuration.Factory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper) +81
   Sitecore.Configuration.Factory.GetInnerObject(XmlNode paramNode, String[] parameters, Boolean assert) +706
   Sitecore.Configuration.Factory.AssignProperties(XmlNode configNode, String[] parameters, Object obj, Boolean assert, Boolean deferred, IFactoryHelper helper) +416
   Sitecore.Configuration.Factory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper) +198
   Sitecore.Configuration.Factory.GetInnerObject(XmlNode paramNode, String[] parameters, Boolean assert) +706
   Sitecore.Configuration.Factory.AssignProperties(XmlNode configNode, String[] parameters, Object obj, Boolean assert, Boolean deferred, IFactoryHelper helper) +416
   Sitecore.Configuration.Factory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper) +198
   Sitecore.Configuration.Factory.CreateObject(String configPath, String[] parameters, Boolean assert) +298
   Sitecore.Configuration.Factory.CreateObject(String configPath, Boolean assert) +38
   Sitecore.Search.SearchManager.get_SearchConfiguration() +24
   Sitecore.Search.SearchManager.GetIndex(String id) +41
   GexaNes.Services.SearchService.SiteSearcher.Search(String searchTerm, Int32& resultCount, Int32 start, Int32 end) in c:\Gexa\Source\Customer Care\External Web\KStreet\DEV - SmallComm\GexaNes.Services\SearchService\SiteSearcher.cs:38
   GexaNes.Web.Layout.Sublayouts.Pages.Search.DoSearch(Int32& totalResults) in c:\Gexa\Source\Customer Care\External Web\KStreet\DEV - SmallComm\GexaNes.Web\Layout\Sublayouts\Pages\Search.ascx.cs:138
   GexaNes.Web.Layout.Sublayouts.Pages.Search.Page_Load(Object sender, EventArgs e) in c:\Gexa\Source\Customer Care\External Web\KStreet\DEV - SmallComm\GexaNes.Web\Layout\Sublayouts\Pages\Search.ascx.cs:83
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

+772

Following is the custom config related to search:

<configuration xmlns:x="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <databases>
            <database id="web" singleInstance="true" type="Sitecore.Data.Database, Sitecore.Kernel">
                <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>
                <Engines.HistoryEngine.SaveDotNetCallStack>false</Engines.HistoryEngine.SaveDotNetCallStack>
            </database>
        </databases>
        <search>
            <configuration>
                <indexes>
                    <index id="web" type="Sitecore.Search.Index, Sitecore.Kernel">
                        <param desc="name">$(id)</param>
                        <param desc="folder">$(id)</param>
                        <Analyzer ref="search/analyzer" />

                        <locations hint="list:AddCrawler">
                             The crawler configuration is shared and moved outside 
                            <web ref="search/crawlers/default" param1="web" />
                        </locations>
                    </index>
                    <index id="master" type="Sitecore.Search.Index, Sitecore.Kernel">
                        <param desc="name">$(id)</param>
                        <param desc="folder">$(id)</param>
                        <Analyzer ref="search/analyzer" />

                        <locations hint="list:AddCrawler">
                             The crawler configuration is shared and moved outside 
                            <master ref="search/crawlers/default" param1="master" />
                        </locations>
                    </index>
                </indexes>
            </configuration>


            <crawlers>
                <default type="GexaNes.Web.Utilities.IndexCrawler,GexaNes.Web">
                    <Database>$(1)</Database>
                    <Root>/sitecore/content</Root>
                    <IndexAllFields>true</IndexAllFields>

                     INCLUDE TEMPLATE FILTER
                             if this filter used, only items based on these templates specified here will be indexed
                             make sure to add templates GUIDs here with unique xml element <name /> 
                    <include hint="list:IncludeTemplate">
                      <contactUsPage>{41893BA4-A5BC-4B14-BEFB-D65257B813ED}</contactUsPage>
                      <contentPage>{191B0A26-A1E7-4DA4-A7E9-47FC8485161A}</contentPage>
                      <landingPage>{0B5298F2-607D-4754-AB6F-CC39559B36F2}</landingPage>
                      <promoPage>{2BDB4D8C-1313-4457-AD89-CDD117494DA7}</promoPage>
                      <requestAQuotePage>{3FC81F3D-B6B4-43C8-BE6C-808F154F4382}</requestAQuotePage>
                      <vanityPage>{04FBFF6D-2EBF-437F-AE17-CC71BECEE3FC}</vanityPage>
                    </include>

                     EXCLUDE TEMPLATE FILTER
                             use this filter to ignore items created from specific templates
                             make sure to add templates GUIDs here with unique xml element <name /> 
                     <include hint="list:ExcludeTemplate">
                                <uniqueTemplateToken1>{GUID}</uniqueTemplateToken1>
                             </include>

                     INCLUDE FIELD FILTER
                             if this filter used, only these fields will be added to the index.
                             make sure to add field GUIDs here with unique xml element <name /> 
                     <include hint="list:IncludeField">
                                 <uniqueFieldToken1>{GUID}</uniqueFieldToken1>
                             </include>

                     EXCLUDE FIELD FILTER
                             use this filter to ignore specific fields from being indexed
                             make sure to add field GUIDs here with unique xml element <name /> 
                     <include hint="list:ExcludeField">
                                <__revision>{8CDC337E-A112-42FB-BBB4-4143751E123F}</__revision>
                                <__contextmenu>{D3AE7222-425D-4B77-95D8-EE33AC2B6730}</__contextmenu>
                                <__security>{DEC8D2D5-E3CF-48B6-A653-8E69E2716641}</__security>
                                <__renderings>{F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E}</__renderings>
                            </include> 

                     FIELD CRAWLERS
                             define logic of how each field is crawled per field type 
                    <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>

                     DYNAMIC FIELDS
                             a set of computed fields to be added to your index
                             this can significally slow down the indexing process 
                    <dynamicFields hint="raw:AddDynamicFields">
                        <dynamicField type="scSearchContrib.Crawler.DynamicFields.AllTemplatesField,scSearchContrib.Crawler" name="_alltemplates" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
                    </dynamicFields>

                     FIELD TYPE INDEXING SETTINGS
                             defines how each field is stored/unstored, tokenized/untokenized, boosted, etc. per field type
                             if a field type is not defined:
                             defaults of storageType="NO", indexType="UN_TOKENIZED" vectorType="NO" boost="1f" are applied 
                    <fieldTypes hint="raw:AddFieldTypes">
                         Text fields need to be tokenized 
                        <fieldType name="single-line text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
                        <fieldType name="multi-line text" storageType="NO" 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" />
                    </fieldTypes>
                </default>
            </crawlers>
        </search>
    </sitecore>
</configuration>

Would really appreciate any help in this matter.

Thanks

2

2 Answers

2
votes

I can see that you have references to scSearchContrib in your config which indicates the use of the Advanced Database Crawler module. This is not compatible with the new search infrastructure in Sitecore 7. Indexes/search code that use it will need to be refactored.

If you're not familiar with Sitecore 7 Search, then here's the documentation to help you get started:

Sitecore Search and Indexing Guide

Here's a Github example were someone demonstrates the conversion:

Example of how I converted Advanced Database Crawler functionality to Sitecore 7.

0
votes

You can also look at this documentation

http://sdn.sitecore.net/upload/sitecore7/70/developer's_guide_to_item_buckets_and%20search_sc7-a4.pdf