我被玩弄的自定义搜索索引处理程序支持SDL Tridion 2011(GA)。 我得到的东西的工作,使用由罗提供了非常有用的信息 ,但是我不知道如果我的执行力是最好的选择。
要求是要能够搜索通过URL在CMS页面(例如www.example.com/news/index.html)。 为了做到这一点,我有使用创建的类ISearchIndexingHandler
接口(下面的代码)。 我在索引项的ContentText领域的网址,但我不知道这是否会通常含有别的一个页面(我想一个网页只有元数据,所以这应该是OK)。 使用这种通过自定义字段的好处是,我可以简单地键入搜索框中键入URL,而无需使用<链接> IN <字段名>或类似的东西。
所以我的问题是,没有任何理由不使用ContentText的网页,并没有任何优势,在使用自定义字段? 另外加分去对如何处理蓝图(如果我创建一个父发布一个网页,我想当地的网址也于儿童出版物索引)好点子的人,并在一个结构组路径被改变的情况下(我想我能以某种方式来自我的索引处理程序中触发子页面项目的重新索引)。
编码:
using System;
using Tridion.ContentManager.Search;
using Tridion.ContentManager.Search.Indexing.Handling;
using Tridion.ContentManager.Search.Indexing.Service;
using Tridion.ContentManager.Search.Indexing;
using Tridion.ContentManager.Search.Fields;
namespace ExampleSearchIndexHandler
{
public class PageUrlHandler : ISearchIndexingHandler
{
public void Configure(SearchIndexingHandlerSettings settings)
{
}
public void ExtractIndexFields(IdentifiableObjectData subjectData, Item item, CoreServiceProxy serviceProxy)
{
PageData data = subjectData as PageData;
if (data != null)
{
PublishLocationInfo info = data.LocationInfo as PublishLocationInfo;
string url = GetUrlPrefix(data) + info.PublishLocationUrl;
item.ContentText = url;
}
}
private string GetUrlPrefix(PageData page)
{
//hardcoded for now, but will be read from publication metadata
return "www.example.com";
}
}
}