2015-10-26 3 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; 

И то для функции, вы можете сделать что-то подобное, комбинируя все поля INT одно поле:

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», что вы могли бы искать, делая ваш поиск гораздо проще.

Смежные вопросы