SearchManager与ContentSearchManager?

时间:2016-10-27 15:26:29

标签: c# lucene sitecore sitecore8

我非常熟悉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;

   }
}

我没有写上述内容,我只是在使用它。

当我遇到包含代码的示例问题Very basic usage of sitecore search时,我正在调查我的问题:

// 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?这里是否存在任何基本的差异,或者只是两种方法获得相同的净结果?

1 个答案:

答案 0 :(得分:2)

您使用SearchManagerIndexSearchContext引用的问题和代码来自Sitecore 6.带有ContentSearchManagerIProviderSearchContext的代码适用于Sitecore 7或8 (好吧,7 +是)。

因此,如果您的代码是针对Sitecore8的代码示例所示,那么ContentSearchManager就是您的最佳选择。