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

SearchManager.GetIndex不工作-使用lucene搜索,lucene,sitecore,Lucene,Sitecore,我正在使用Sitecore 7.0在我的系统中应用搜索功能(实际上我正在将代码从Sitecore 6.5转换为Sitecore 7.0)。当我尝试使用Sitecore.Search.SearchManager.GetIndex方法获取索引时,我发现配置属性的值为null 我在6.5中的示例代码如下 webDb=Sitecore.Context.Database; Sitecore.Data.Index.Index indx=webDb.Index[“系统”]//获取警告-已弃用的方法 Item

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

我在6.5中的示例代码如下

webDb=Sitecore.Context.Database;
Sitecore.Data.Index.Index indx=webDb.Index[“系统”]//获取警告-已弃用的方法
Item bucketItem=Sitecore.Context.Item;
IndexSearcher IndexSearcher=indx.GetSearcher(webDb);
topDocs=GetContent(关键字、webDb、indexSearcher、年份、地区名称);
如果(topDocs!=null)
{
int totalMatchItemCount=topDocs.TotalHits;
如果(totalMatchItemCount>0)
{
returnValues=新项目[totalMatchItemCount];
int i=0;
foreach(topDocs.ScoreDocs中的ScoreDoc ScoreDoc)
{
Document doc=indexSearcher.doc(scoreDoc.doc);
Item=Index.GetItem(doc,webDb);//获取警告-已弃用的方法
返回值[i++]=项;
}
}
}
它工作正常,但在下面的行中给出了不推荐的方法的错误

Sitecore.Data.Index.Index indx=webDb.Index[“系统”];

Item Item=Index.GetItem(doc,webDb);
我的Sitecore 7.0转换代码如下:

var children=newlist();
Sitecore.Search.Index searchIndx=Sitecore.Search.SearchManager.GetIndex(“系统”)//显示SearchManager.\u配置为空值,因此所有方法和属性都将异常获取。
使用(var searchContext=searchIndx.CreateSearchContext())
{
var ftQuery=newsitecore.Search.FullTextQuery(关键字);
var hits=searchContext.Search(ftQuery);
var results=hits.FetchResults(0,hits.Length);
foreach(结果中的Sitecore.Search.SearchResult)
{
//我的东西
}
}
当我尝试使用Sitecore 7.0获取值时,获取以下异常

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


谢谢。

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

请尝试以下操作以获得进一步帮助:

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


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

使用以下代码获取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;
            }
        }

您好,谢谢回复,我无法在API中找到Sitecore.ContentSearch。请确认一下,我正在使用Lucene.Net的dll版本是3.0.3.0?这是正确的Lucene版本,但是
Sitecore.ContentSearch
Sitecore.ContentSearch.dll
程序集的一部分。检查您的解决方案中是否引用了该节点。我仍然在Sitecore.ContentSearch.ContentSearchManager的配置部分中获取空值,错误为“找不到配置节点:ContentSearch/configuration”。是否遵循Sitecore的更新过程?听起来你漏掉了几点:谢谢,我找到了问题所在。不修改配置设置。您能建议在配置文件中的什么地方进行更改吗?