2015-10-26 49 views
0

您好我有搜索Umbraco 7它工作正常,但我必須添加很多搜索字段索引,它不實際。我如何搜索所有字段?Umbraco 7 searchCriteria與所有領域

@ { string searchQuery = Request [「query」]; if(String.IsNullOrWhiteSpace(searchQuery)) searchQuery =「」; }

var searcher = ExamineManager.Instance; 
var searchCriteria = searcher.CreateSearchCriteria(); 

var query = searchCriteria.GroupedOr(new[] { 
"nodeName", 
//"packSizes", 
"name", 
"title", 
"bodyText", 
"body", 
"field1", 
"field2", 
"field3", 
"field4", 
"field5", 
"field6" 
}, searchQuery).Compile(); 
var SearchResults = searcher.Search(query).Where(x => x["__IndexType"] == "content").ToList(); } @if (SearchResults.Any()) { 
<ul class="search-results-box"> 
    @foreach (var result in SearchResults) 
    { 
     var node = Umbraco.TypedContent(result.Id); 
     var pathIds = result["__Path"].Split(','); 
     var path = Umbraco.TypedContent(pathIds).Where(p => p != null).Select(p => new { p.Name }).ToList(); 

     if (node != null) 
     { 
      <li><a href="@node.Url">@node.Name</a></li> 
     } 
    } 
</ul> } 

回答

1

您可以將事件添加到索引命令來連接所有的字段成索引時間一個大的領域,只是搜索一個領域。

掛接到的情況下,在你的OnApplicationStarting事件處理程序,請執行下列操作:

ExamineManager.Instance.IndexProviderCollection["YOUR INDER NAME HERE"].GatheringNodeData += SetSiteSearchFields; 

再來說功能,你可以做這樣的事情,結合各個領域的詮釋單場:

void SetSiteSearchFields(object sender, IndexingNodeDataEventArgs e) 
    { 
     //grab some fields 
     var combined = e.Fields["field1"] + " " + e.Fields["field2"]; 

     //add as new field 
     e.Fields.Add("searchField", combined); 
    } 

這會給你一個名爲「searchField」的字段,你可以搜索,使你的搜索更簡單。