dtSearch的文档在这方面有点令人困惑。我试图让dtSearch返回的项目按照创建的日期顺序返回(所以最新的第一个)。现在,engine.Search方法似乎在返回的结果中根本不包含有关日期的任何信息。
我知道我需要在创建索引时使用高级选项来获取日期字段,以便我可以按此排序,但我该怎么做?
我看到了这一点:http://support.dtsearch.com/dts0150.htm但我不确定在何处或如何应用它。我没有文档中引用的演示,那里的任何人都可以向我展示如何在索引中添加日期吗?
答案 0 :(得分:0)
为了能够对此(对于dtSearch)自定义字段进行排序,您需要将带有创建日期的元标记添加到由dtSearch编制索引的页面。您可以获取dtSearch文档并检查其中的完成情况。
你的meta标签看起来像这样:
<meta id="scDateCreated" name="scDateCreated" content="20100629" />
在dtSearch抓取工具中,您可以指定应将此元标记(字段)编入索引。在dtSearch索引此字段后,您可以使用此字段按照创建项目/页面的日期对搜索结果进行排序。请注意,如果您使用通配符设置(url中的/ *)来显示通配符项上不同数据源中的项目,则必须从通配符上显示的项目中获取创建日期,而不是Sitecore.Context .Item。
日期排序示例代码:
ISearch engine = this.GetEngine();
// Search with the given searchPhrase and the set SearchOptions
engine.Search(searchPhrase, this.searchOptions);
// If there are searchResults return the searchResults formatted
if (engine.SearchResults != null)
{
return this.FormatSearchResults(engine.SearchResults, engine, searchPhrase, templateId, publishedFrom, publishedTo, specifiedPath, sortOrder);
}
这会得到你的结果。现在排序(this.FormatSearchResults):
// If a templateId was given
if (templateId != string.Empty)
{
list = xmlResult.SelectNodes("/sitecore/result/item[scWebsitePath='" + sitecoreContextItemPath + "' and scTemplateId='" + templateId + "' and scDateCreated > '" + publishedFrom + "' and scDateCreated < '" + publishedTo + "']");
}
else
{
list = xmlResult.SelectNodes("/sitecore/result/item[scWebsitePath='" + sitecoreContextItemPath + "' and scDateCreated > '" + publishedFrom + "' and scDateCreated < '" + publishedTo + "']");
}
如您所见,meta标签将出现在此searchEngine将返回的XML中。您可以使用自己的类将dtSearchResult强制转换为List,然后使用Linq进行排序。