SearchManager.GetIndex不起作用 - 使用lucene搜索

时间:2014-05-05 09:35:11

标签: lucene sitecore

我正在使用Sitecore 7.0在我的系统中应用搜索功能(实际上我将我的代码从Sitecore 6.5转换为sitecore 7.0)。当我尝试使用Sitecore.Search.SearchManager.GetIndex方法获取索引时,我发现配置属性为空值。

我在6.5中的示例代码如下

webDb = Sitecore.Context.Database;
Sitecore.Data.Indexing.Index indx = webDb.Indexes["system"]; //Getting warning  - deprecated method
Item bucketItem = Sitecore.Context.Item;

IndexSearcher indexSearcher = indx.GetSearcher(webDb);

topDocs = GetContent(keyWords, webDb, indexSearcher, year, regionName);

if (topDocs != null)
{
    int totalMatchItemCount = topDocs.TotalHits;
    if (totalMatchItemCount > 0)
    {
       returnValues = new Item[totalMatchItemCount];

       int i = 0;
       foreach (ScoreDoc scoreDoc in topDocs.ScoreDocs)
       {
          Document doc = indexSearcher.Doc(scoreDoc.Doc);
          Item item = Index.GetItem(doc, webDb);//Getting warning  - deprecated method
          returnValues[i++] = item;
       }
     }
}

它的工作正常但在下面的行中给出了弃用方法的错误,

Sitecore.Data.Indexing.Index indx = webDb.Indexes["system"];

Item item = Index.GetItem(doc, webDb);

我转换的Sitecore 7.0代码如下,

   var children = new List<Item>();

   Sitecore.Search.Index searchIndx = Sitecore.Search.SearchManager.GetIndex("system");//Shows SearchManager._Configuration with NULL value, hence all methods and property getting with exception.

   using (var searchContext = searchIndx.CreateSearchContext())
   {
     var ftQuery = new Sitecore.Search.FullTextQuery(keyWords);
     var hits = searchContext.Search(ftQuery);
     var results = hits.FetchResults(0, hits.Length);

     foreach (Sitecore.Search.SearchResult result in results)
     {
          //My stuff
     }
   }

当我尝试使用Sitecore 7.0获取值时,请获取以下异常

无法创建类型的实例:Lucene.Net.Analysis.Standard.StandardAnalyzer。找不到匹配的构造函数。

感谢。

3 个答案:

答案 0 :(得分:1)

我有一种感觉,这是因为您仍在使用pre-Sitecore 7 Sitecore.Search API,而不是较新的Sitecore.ContentSearch

请尝试以获取更多帮助:Searching with the new Sitecore 7 API

答案 1 :(得分:1)

使用以下代码获取Sitecore 7中的索引。

// Index
public static string IndexName 
{
    get
        {
        return (Sitecore.Context.Database.Name.ToLower()) == "master" ? "sitecore_master_index" : "sitecore_web_index";
        }
}



public static ISearchIndex _index;
        public static ISearchIndex Index
        {
            get
            {
                if (_index == null) { _index = ContentSearchManager.GetIndex(IndexName); }

                return _index;
            }
        }

答案 2 :(得分:0)

  

无法创建类型的实例:   Lucene.Net.Analysis.Standard.StandardAnalyzer。没有匹配的构造函数   被发现了。

我的/ bin文件夹中存在来自多个Sitecore版本的DLL时,我发现此错误,所以我同意@TwentyGotoTen:听起来你错过了升级过程中的一个步骤,或者您需要检查部署过程以确保您的解决方案不会引用旧版本的Sitecore程序集。