我正在尝试设置一个非常基本的搜索索引,以索引特定文件夹中的所有项目。但我没有做到。请检查我的代码:
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();
}
}
}
这是对的吗?我只是想创建一个简单的索引,然后开始使用它。
答案 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");