Получение dtsearch в sitecore для сортировки элементов созданной датой
Документация для dtSearch немного запутывает это. Я пытаюсь вернуть элементы, возвращенные dtSearch, в порядке убывания даты, созданной по убыванию (сначала самое новое). В данный момент метод engine.Search вообще не содержит никакой информации о дате в возвращаемых результатах.
Я понимаю, что мне нужно использовать расширенные опции при создании индекса, чтобы получить поле даты, чтобы я мог сортировать по нему, но как мне это сделать?
Я вижу это: http://support.dtsearch.com/dts0150.htm Но я не уверен, где и как его применить. У меня нет ссылочной демонстрации из документа, может ли кто-нибудь показать, как я добавлю дату в индекс?
1 ответ
Чтобы иметь возможность сортировки по этому (для 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 + "']");
}
Как вы видите, метатеги будут присутствовать в XML, который будет возвращать этот searchEngine. Вы можете получить свой собственный класс, чтобы иметь возможность привести ваш dtSearchResult к списку, а затем использовать Linq для сортировки.