2016-03-21 3 views
1

В настоящее время я использую UmbracoExamine для всех поисковых запросов моего проекта, и я пытаюсь выяснить, что именно представляет собой параметр запроса «.ParentId».UmbracoExamine ParentID?

Я надеялся, что смогу использовать его, чтобы найти все дочерние узлы из parentID, но я не могу заставить его работать.

В принципе, если поисковая строка содержит, например, «C# Programming», он должен найти все статьи этой категории. Это просто пример.

Спасибо заранее!

ответ

1

Когда вы говорите, что должны найти все статьи этой категории, я предполагаю, что у вас есть структура, подобная приведенной ниже?

-- 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") 
     { 

     } 
    } 
+0

Привет, Спасибо, что вернулись ко мне. Это в значительной степени то, как я это сделал, но я буду ждать других ответов, так как мне бы хотелось увидеть решение, которое не требует от нас фильтрации результатов после их получения. Намного лучше, если мы можем только индексировать полученные результаты, а не получать их сразу, а затем фильтровать их по идентификатору родителя. Надеюсь, у меня есть смысл. Еще раз спасибо! – Mikkel

+0

Я не думаю, что родительский идентификатор в данный момент доступен из полей атрибута индекса –

+0

Да, именно поэтому я завершил фильтрацию результатов после их получения. Он отлично работает для этого сценария. Спасибо за помощь! – Mikkel