dtSearch 的文档对此有点混乱。我试图让 dtSearch 返回的项目按创建日期的降序返回(所以最新的在前)。现在,engine.Search 方法在返回的结果中似乎根本不包含有关日期的任何信息。
我知道在创建索引时需要使用高级选项来获取其中的日期字段,以便我可以按此排序,但我该怎么做呢?
我看到了这个: http: //support.dtsearch.com/dts0150.htm但我不确定在哪里或如何应用它。我没有文档中引用的演示,任何人都可以展示我如何将日期添加到索引中吗?
dtSearch 的文档对此有点混乱。我试图让 dtSearch 返回的项目按创建日期的降序返回(所以最新的在前)。现在,engine.Search 方法在返回的结果中似乎根本不包含有关日期的任何信息。
我知道在创建索引时需要使用高级选项来获取其中的日期字段,以便我可以按此排序,但我该怎么做呢?
我看到了这个: http: //support.dtsearch.com/dts0150.htm但我不确定在哪里或如何应用它。我没有文档中引用的演示,任何人都可以展示我如何将日期添加到索引中吗?
为了能够对这个(用于 dtSearch)自定义字段进行排序,您需要将带有创建日期的元标记添加到由 dtSearch 索引的页面。您可以获取 dtSearch 文档并检查其中的操作方式。
您的元标记看起来像这样:
<meta id="scDateCreated" name="scDateCreated" content="20100629" />
在 dtSearch 爬虫工具中,您可以指定该元标记(字段)应该被索引。在 dtSearch 索引此字段后,您可以使用此字段来按项目/页面的创建日期对您的搜索结果进行排序。请注意,如果您使用通配符设置(url 中的 /*)在通配符项目上显示来自不同数据源的项目,则必须从通配符上显示的项目获取创建日期,而不是 Sitecore.Context 。物品。
按日期排序的示例代码:
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 + "']");
}
如您所见,元标记将出现在此 searchEngine 将返回的 XML 中。您可以让自己的类能够将 dtSearchResult 转换为 List,然后使用 Linq 进行排序。