SearchManager vs ContentSearchManager?
本文关键字:ContentSearchManager vs SearchManager | 更新日期: 2023-09-27 18:15:20
我从来没有真正深入研究过sitecore的搜索功能,直到现在我一直在使用以前开发人员使用的东西。我正在研究一个问题,其中某些谓词似乎没有在下面的代码片段中工作:
public IEnumerable<IndexedEvent> SearchItems(Expression<Func<IndexedEvent, bool>> predicate)
{
using (IProviderSearchContext _context = ContentSearchManager.GetIndex(indexName).CreateSearchContext())
{
IEnumerable<IndexedEvent> results = _context
.GetQueryable<IndexedEvent>()
.Where(predicate);
return results;
}
}
这不是我写的,我只是在用。
我正在寻找我的问题时,我遇到了这个例子问题非常基本的使用sitecore搜索包括代码:
// use id of from the index configuration using (IndexSearchContext indexSearchContext = SearchManager.GetIndex("my-custom-index").CreateSearchContext()) { // MatchAllDocsQuery will return everything. Use proper query from the link below SearchHits hits = indexSearchContext.Search(new MatchAllDocsQuery(), int.MaxValue); // Get Sitecore items from the results of the query List<Item> items = hits.FetchResults(0, int.MaxValue).Select(result => result.GetObject<Item>()).Where(item => item != null).ToList(); }
现在这似乎使用了一种完全不同的方法来查询索引,IndexSearchContext
,其中我的代码(不是我写的)使用IProviderSearchContext
。我找不到任何关于它们的文档,它们位于完全不同的程序集中。
这就引出了一个问题,我什么时候应该使用IndexSearchContext
,什么时候应该使用IProviderSearchContext
?这里有什么根本的区别吗?还是仅仅是实现相同净结果的两种方式?
您所指的SearchManager
和IndexSearchContext
的问题和代码来自Sitecore 6。ContentSearchManager
和IProviderSearchContext
的代码适用于Sitecore 7或8(好吧,就是7+)。
所以,如果你的代码是Sitecore8作为你的标签和代码的例子建议,ContentSearchManager是一种方式去。