0

dtSearch 的文档对此有点混乱。我试图让 dtSearch 返回的项目按创建日期的降序返回(所以最新的在前)。现在,engine.Search 方法在返回的结果中似乎根本不包含有关日期的任何信息。

我知道在创建索引时需要使用高级选项来获取其中的日期字段,以便我可以按此排序,但我该怎么做呢?

我看到了这个: http: //support.dtsearch.com/dts0150.htm但我不确定在哪里或如何应用它。我没有文档中引用的演示,任何人都可以展示我如何将日期添加到索引中吗?

4

1 回答 1

0

为了能够对这个(用于 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 进行排序。

于 2013-10-22T07:51:13.783 回答