2015-11-02 43 views
0

我們網站上的內容搜索(使用檢查)已損壞。這些問題可以分爲三個不同的類別:配置檢查搜索器如何排除已刪除的頁面

搜索返回已刪除的頁面:我不知道如何從搜索結果中刪除已刪除的內容。有沒有辦法添加過濾條件來排除已刪除的頁面?

搜索正在返回來自所有網站的內容:我們在一個Umbraco實例中爲兩個不同國家(澳大利亞和新西蘭)運行兩個網站。問題是搜索結果是從這兩個網站返回頁面。我們在新西蘭搜索結果上不需要AU頁面,反之亦然。如何創建搜索查詢以將其限制爲特定的根節點ID?

使用不帶模板的頁面:某些內容節點沒有與它們關聯的模板,並且將顯示爲父節點的一部分。有沒有辦法將搜索限制到特定的文檔類型?但是,如果在子節點上找到內容,請調出具有特定文檔類型的父節點?

我可能會在一篇文章中提出太多問題,但我想其他用戶可能以前遇到過這樣的問題。

的代碼我使用至今:

private List<SiteSearchResult> GetSiteResults(string query, out int totalResults) 
{ 
    var criteria = ExamineManager.Instance 
     .SearchProviderCollection["WebSearcher"] 
     .CreateSearchCriteria(IndexTypes.Content); 
    var filter = 
     criteria.GroupedOr(
      new[] 
      { 
       "nodeName", "heading", "content", "metaKeywords", "title", "umbracoNaviHide", "umbracoUrlName", 
       "umbracoUrlAlias", "metaCategory", "metaDescription", "metaTags", "heading", "subHeading", 
       "quote", "author", "socialCopy", "socialTitle", "socialTitle2", "thumbTitle", "thumbTitle2", 
       "thumbCopy", "thumbQuote", "url", "location" 
      }, query) 
      .Compile(); 

    var searchResults = 
     ExamineManager.Instance.SearchProviderCollection["WebSearcher"].Search(filter) 
      .OrderByDescending(x => x.Score); 
    totalResults = searchResults.Count(); 
    var results = new List<SiteSearchResult>(); 

    foreach (var item in searchResults) 
    { 
     var heading = ""; 
     var copy = ""; 
     var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 

     var url = umbracoHelper.Url(item.Id, UrlProviderMode.Relative); 

     if (url.Length == 0) 
     { 
      continue; 
     } 

     if (url.StartsWith("/forms/")) 
     { 
      continue; 
     } 

     // Do many things here 

     results.Add(r); 
    } 

    return results; 
} 

回答

2

搜索將返回刪除的頁面:

不知道有沒有什麼幫助,但你可以只從索引中排除未公佈/保護的結果。你可以在你的ExamineSettings.config文件中做到這一點。對你來說應該是一個類似的東西:

<add name="WebIndexer" 
    type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine" 
    supportUnpublished="false" 
    supportProtected="false" 
    analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" /> 

的supportUnpublished和supportProtected標誌定義,如果未公佈/保護的內容應存放在特定的指數。

帶來了頁面沒有模板

同樣,你可能改變你的ExamineIndex.config文件,只是指定的文件類型應該被索引,並且不應該。 例如:

<IndexSet SetName="WebIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/{machinename}/Features/"> 
    <IndexAttributeFields> 
    <add Name="id" EnableSorting="true" /> 
    </IndexAttributeFields> 
    <IndexUserFields>  
    <add Name="exampleField" /> 
    </IndexUserFields> 
    <IncludeNodeTypes> 
    <add Name="DocumentType1" /> 
    </IncludeNodeTypes> 
</IndexSet> 

的aboved指數將文件類型「DocumentType1」,更重要的是它只會存儲「ID」字段(並啓用排序就可以了)從系統中那些與「exampleField只有containt節點「來自用戶定義的字段。您也可以使用EncludeNodeType來指定哪些文檔類型不應該登錄索引。

搜索從所有的網站內容返回:

如果在這兩個網站使用的文件類型是不同的,然後創建每個兩個單獨的索引應該解決這個問題。但是,如果不是,我目前還不知道如何以適當的方式解決這個問題。快速解決方案可能會向包含值的文檔類型添加一個字段,該值指定文檔來自NZ還是AU區域。然後,您可以將其添加到索引並在搜索時對其進行過濾。很可能有更好的方法來做到這一點。

檢查文檔

如果您需要了解如何處理檢查索引和搜索一些信息,你總是可以look here.