我正在尝试设置一个非常基本的搜索索引,以索引特定文件夹中的所有项目。我没有真正使用太多的搜索,但我正在尝试使用开箱即用的功能,因为它是一个非常简单的搜索。我只想索引所有字段。 sitecore文档确实没有提供太多信息 - 我已经阅读了一些博客,他们似乎都建议我需要高级数据库爬虫(http://trac.sitecore.net/AdvancedDatabaseCrawler) - 基本上,这就是'它赢了没有自定义抓取工具就行了。
这是对的吗?我只想创建一个简单的索引,然后开始使用它。没有任何共享模块或其他方式,最简单的方法是什么?我浏览了sitecore上的文档,但不是很清楚(至少对我而言)。它定义了web.config中索引配置的不同元素,但并没有真正解释它们的作用以及可用的值。也许我找不到合适的地方..
答案 0 :(得分:15)
在 Sitecore 中创建新的 Lucene 索引的简单方法,只需3个步骤即可显示特定节点下的所有项目:
1:将以下配置添加到 Sitecore 配置中的configuration/sitecore/search/configuration/indexes
:
<!-- id must be unique -->
<index id="my-custom-index" type="Sitecore.Search.Index, Sitecore.Kernel">
<!-- name - not sure if necessary but use id and forget about it -->
<param desc="name">$(id)</param>
<!-- folder - name of directory on the hard drive -->
<param desc="folder">__my-custom-index</param>
<!-- analyzer - reference to analyzer defined in Sitecore.config -->
<Analyzer ref="search/analyzer" />
<!-- list of locations to index - each of the with unique xml tag -->
<locations hint="list:AddCrawler">
<!-- first location (and the only one in this case) - specific folder from you question -->
<!-- type attribute is the crawler type - use default one in this scenario -->
<specificfolder type="Sitecore.Search.Crawlers.DatabaseCrawler,Sitecore.Kernel">
<!-- indexing itmes from master database -->
<Database>master</Database>
<!-- your folder path -->
<Root>/sitecore/content/home/my/specific/folder</Root>
</specificfolder>
</locations>
</index>
2:重建新索引(只有一次,所有进一步的更改都会自动检测到):
SearchManager.GetIndex("my-custom-index").Rebuild();
3:使用新索引:
// 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();
}
以下是描述Sitecore Search and Indexing的PDF格式。
以下是关于Troubleshooting Sitecore Lucene search and indexing的博文。
答案 1 :(得分:3)
Sitecore Search Contrib(高级数据库搜寻器的新名称)是最佳选择,您只需在app config文件夹中配置其配置,告诉它启动路径数据库等。
然后,您可以使用其API在文件夹中按模板类型搜索特定字段具有特定值的位置。这是一个代码示例。
MultiFieldSearchParam parameters = new MultiFieldSearchParam();
parameters.Database = "web";
parameters.InnerCondition = QueryOccurance.Should;
parameters.FullTextQuery = searchTerm;
parameters.TemplateIds = array of pipe seperated ID's
var refinements = Filters.Select(item => new MultiFieldSearchParam.Refinement(item.Value, item.Key.ToString())).ToList();
parameters.Refinements = refinements;
//实际搜索
var returnItems = new List<Item>();
var runner = new QueryRunner(IndexName);
var skinnyItems = runner.GetItems(new[] {parameters});
skinnyItems.ForEach(x => returnItems.Add(Database.GetItem(new ItemUri(x.ItemID))));
return returnItems;
否则,您只需为标准lucene搜索配置web.config并使用此代码进行搜索。 (数据库使用“web”,开始项目等)
public Item[] Search(string searchterms)
{
var children = new List<Item>();
var searchIndx = SearchManager.GetIndex(IndexName);
using (var searchContext = searchIndx.CreateSearchContext())
{
var ftQuery = new FullTextQuery(searchterms);
var hits = searchContext.Search(ftQuery);
var results = hits.FetchResults(0, hits.Length);
foreach (SearchResult result in results)
{
if (result.GetObject<Item>() != null)
{
//Regular sitecore item returned
var resultItem = result.GetObject<Item>();
if (ParentItem == null)
{
children.Add(resultItem);
}
else if (resultItem.Publishing.IsPublishable(DateTime.Now, false) &&
ItemUtilities.IsDecendantOfItem(ParentItem, resultItem))
{
children.Add(resultItem);
}
}
}
}
return children.ToArray();
}
答案 2 :(得分:0)
然后,您可以下载Sitecore的Lucene Index Viewer扩展程序以查看索引,也可以下载Lucene Tool以查看索引。查看是否可以填充文档(索引中的文件)。这些在Lucene中称为“文档”,从技术上讲,这些文档是您指定的节点下的内容项。
答案 3 :(得分:-2)
Brian Pedersen发表了一篇不错的帖子。您将从一个简单的爬虫开始。需要下载高级数据库爬网程序,并在构建后添加对项目的引用。
然后你必须创建Brian博客中提到的配置文件,你必须按原样复制(除了模板id的全部)。你基本上明白这一点。
然后,您可以下载Sitecore的Lucene Index Viewer扩展程序以查看索引,也可以下载Lucene Tool以查看索引。查看是否可以填充文档(索引中的文件)。这些在Lucene中称为'Documents',从技术上讲,这些文档是您指定的节点下的内容项。
希望这有帮助!