Когда вы говорите, что должны найти все статьи этой категории, я предполагаю, что у вас есть структура, подобная приведенной ниже?
-- Programming
----Begin Java Programming
----Java Installation on Linux
----Basics of C# Programming
----What is SDLC
----Advanced C# Programming
-- Sports
----Baseball basics
Если да, то я предполагаю, что, как хорошо, что вы хотите, чтобы все статьи под «программирование», должны быть перечислены, а не только те, которые содержат «C# программирование»?
Что вам нужно сделать, это петли через SearchResults из запроса и найти родительский узел оттуда
IPublishedContent node = new UmbracoHelper(UmbracoContext.Current).TypedContent(item.Fields["id"].ToString());
IPublishedContent parentNode = node.Parent;
После того, как у вас есть родительский узел вы можете получить все это дети, а также некоторые их в зависимости от типа документа и то, что вы хотите сделать
IEnumerable<IPublishedContent> allChildren = parentNode.Children;
IEnumerable<IPublishedContent> specificChildren = parentNode.Children.Where(x => x.DocumentTypeAlias.Equals("aliasOfSomeDocType"));
Пример кода ниже
//Fetching what eva searchterm some bloke is throwin' our way
string q = Request.QueryString["search"].Trim();
//Fetching our SearchProvider by giving it the name of our searchprovider
Examine.Providers.BaseSearchProvider Searcher = Examine.ExamineManager.Instance.SearchProviderCollection["SiteSearchSearcher"];
// control what fields are used for searching and the relevance
var searchCriteria = Searcher.CreateSearchCriteria(Examine.SearchCriteria.BooleanOperation.Or);
var query = searchCriteria.GroupedOr(new string[] { "nodeName", "introductionTitle", "paragraphOne", "leftContent", "..."}, q.Fuzzy()).Compile();
//Searching and ordering the result by score, and we only want to get the results that has a minimum of 0.05(scale is up to 1.)
IEnumerable<SearchResult> searchResults = Searcher.Search(query).OrderByDescending(x => x.Score).TakeWhile(x => x.Score > 0.05f);
//Printing the results
foreach (SearchResult item in searchResults)
{
//get the parent node
IPublishedContent node = new UmbracoHelper(UmbracoContext.Current).TypedContent(item.Fields["id"].ToString());
IPublishedContent parentNode = node.Parent;
//if you wish to check for a particular document type you can include this
if (item.Fields["nodeTypeAlias"] == "SubPage")
{
}
}
Привет, Спасибо, что вернулись ко мне. Это в значительной степени то, как я это сделал, но я буду ждать других ответов, так как мне бы хотелось увидеть решение, которое не требует от нас фильтрации результатов после их получения. Намного лучше, если мы можем только индексировать полученные результаты, а не получать их сразу, а затем фильтровать их по идентификатору родителя. Надеюсь, у меня есть смысл. Еще раз спасибо! – Mikkel
Я не думаю, что родительский идентификатор в данный момент доступен из полей атрибута индекса –
Да, именно поэтому я завершил фильтрацию результатов после их получения. Он отлично работает для этого сценария. Спасибо за помощь! – Mikkel