如何在Sitecore 7.x中进行分面搜索?

时间:2014-12-15 13:46:39

标签: sitecore sitecore7 faceted-search

有人能指点我一些文档,分步说明如何在Sitecore 7.x进行分面搜索吗?我已阅读官方Sitecore文档(开发人员项目桶和搜索指南)。

我发现该文件非常混乱。第2章是关于Item Buckets的。好吧,我不需要这个项目的项目桶。我没有那么多内容项。第3章称为“搜索”,但我认为它正在谈论在Sitecore界面中从内部搜索项目桶中的内容项。

这很有趣 - 但不是我需要的。第5章是关于使用Item Buckets进行开发。但是,当他们谈论在Sitecore界面内进行搜索以及他们谈论在您的网站中构建搜索时,我很不清楚。

我正在寻找的是如何设置索引和方面的明确的逐步说明,然后是如何执行分面搜索的特定代码示例。有谁知道这是否存在于网上任何地方?

1 个答案:

答案 0 :(得分:0)

Sitecore开发团队为Sitecore 7的发布(其中引入了新的搜索功能)完成了一系列博客和Google Hangouts。您可以在此处访问:http://www.sitecore.net/Learn/Blogs/Technical-Blogs/Sitecore-7-Development-Team/Posts/2013/10/Facets-Explained.aspx

在设置索引方面,使用提供的配置文件,即Sitecore.ContentSearch.Lucene.Index.Web.config,并根据需要使用配置。默认情况下,您将设置三个索引(sitecore_content_web,sitecore_content_core和sitecore_content_master)。如果要自定义,则只需编辑当前配置。索引配置的Locations部分最相关,节点应该是自解释的,但主要是:

  • Root:定义Sitecore内容树中的索引位置(例如Sitecore / Content / MyStuff)
  • 数据库:指定使用哪个数据库(主,Web或核心)

每个索引可以有很多抓取工具,但您可能不需要,我不会从那开始。

关于分面,这主要是由Linq扩展“FacetOn”驱动的。这可以应用于索引上的Linq查询:

        using (IProviderSearchContext context =  ContentSearchManager.GetIndex(Constants._webContentIndexName).CreateSearchContext())
        {
            var model = new SearchResultViewModel();

            //Get all items in home ordered by content data
            //Faceted on semantics so will work with tagging
            IQueryable<CustomSearchResultItem> query =     context.GetQueryable<CustomSearchResultItem>()
                .Where(i => i.Path.StartsWith(Constants._startPath))
                .Where(i => i.Content.Contains(searchTerm))
                .Where(i => i.TemplateId != exclusionTemplate)
                .FacetOn(i => i.Semantics);

            //DO SOMETHING WITH RESULTS

        }

只是为了澄清任何混淆,当文档引用项目桶等时,这与您执行搜索的方式没有什么不同。关于Sitecore的好处是,甚至GUI都是基于您用来开发解决方案的相同API构建的。因此,在Item Buckets周围开发内部搜索的地方,您可以在自己的搜索解决方案中使用这些示例。