在sitecore中获取dtsearch以按createdDate对项目进行排序

时间:2013-10-09 17:42:00

标签: indexing sitecore dtsearch

dtSearch的文档在这方面有点令人困惑。我试图让dtSearch返回的项目按照创建的日期顺序返回(所以最新的第一个)。现在,engine.Search方法似乎在返回的结果中根本不包含有关日期的任何信息。

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

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

1 个答案:

答案 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进行排序。