如何在sitecore中创建搜索功能

时间:2014-02-18 07:38:42

标签: sitecore

我正在尝试设置一个非常基本的搜索索引,以索引特定文件夹中的所有项目。但我没有做到。请检查我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sitecore.Data.Items;
using Sitecore.ContentSearch;
using Sitecore.Search;
using Sitecore.ContentSearch.SearchTypes;
using Sitecore.ContentSearch.Linq;
using Sitecore.Data;

protected void Page_Load(object sender, EventArgs e)
{
     var Index = ContentSearchManager.GetIndex("sitecore_web_index");

     using (var Context = Index.CreateSearchContext())
     {
           IQueryable<SearchResultItem> query = 
                       Context.GetQueryable<SearchResultItem>()
                       .Where(x => x.TemplateName.Contains("main"));

            SearchResults<SearchResultItem> results = query.GetResults();

            if (results.Hits.Any())
            {
                rpNewsListing.DataSource =
                      results.Hits.Select(hit => hit.Document.GetItem());

                rpNewsListing.DataBind();

                //rpNewsListing.DataSource = results.Hits.Select(x => x.Document);
                // Extract the Document for each hit - this is the NewsResult object

                //rpNewsListing.DataBind();
            }    
      }      
}

这是对的吗?我只是想创建一个简单的索引,然后开始使用它。

2 个答案:

答案 0 :(得分:0)

使用Sitecore提供的默认索引,除非您有非常具体的需求,否则不必自己创建自定义索引。默认索引包含Sitecore树中的所有内容。 需要在配置文件中配置自定义索引,但是,如果您愿意,可以使用自定义字段扩展现有的默认索引。

您提供的代码在从标准Sitecore索引中获取搜索结果时是正确的。

答案 1 :(得分:0)

我认为你使用的是TemplateName.Contains("main")法令,试图按照你提到的这个特定文件夹进行过滤。

是的,您可以创建一个特定索引,该索引仅索引给定文件夹中的项目。 最简单的方法是复制sitecore_web_index定义并创建自己的root更改crawler内的节点。

像这样:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <contentSearch>
      <configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration, Sitecore.ContentSearch.LuceneProvider">
        <indexes hint="list:AddIndex">

          <index id="sitecore_MYFOLDER_index" type="Sitecore.ContentSearch.LuceneProvider.LuceneIndex, Sitecore.ContentSearch.LuceneProvider">

            <param desc="name">$(id)</param>
            <param desc="folder">$(id)</param>
            <!-- This initializes index property store. Id has to be set to the index id -->
            <param desc="propertyStore" ref="contentSearch/databasePropertyStore" param1="$(id)" />
            <strategies hint="list:AddStrategy">
              <!-- NOTE: order of these is controls the execution order -->
              <strategy ref="contentSearch/indexUpdateStrategies/onPublishEndAsync" />
            </strategies>
            <commitPolicyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor, Sitecore.ContentSearch">
              <policies hint="list:AddCommitPolicy">
                <policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy, Sitecore.ContentSearch" />
              </policies>
            </commitPolicyExecutor>
            <locations hint="list:AddCrawler">
              <crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
                <Database>web</Database>

                <Root>/sitecore/MYFOLDER</Root>

              </crawler>
            </locations>
          </index>
        </indexes>
      </configuration>
    </contentSearch>
  </sitecore>
</configuration>

注意我只将索引名称更改为* sitecore_MYFOLDER_index *,将根目录更改为 / sitecore / MYFOLDER

然后使用新的索引定义

创建内容搜索
var Index = ContentSearchManager.GetIndex("sitecore_MYFOLDER_index");