我正在使用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。找不到匹配的构造函数。
感谢。
答案 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程序集。