В Config/ExamineIndex.config вы создаете новый IndexSet со всеми свойствами, которые хотите, чтобы пользователи могли выполнять поиск.
Umbraco.TypedSearch (Request.QueryString ["query"]); будет искать что-либо на всей странице, но если вы правильно настроили UmbracoExamine, вы можете выбрать, какие типы документов вы хотите, чтобы люди могли искать, а также вы можете выбрать, какие свойства вы хотите, чтобы люди могли индексировать содержание на основе.
Например:
<IndexSet SetName="ExternalTopLevelSearchSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/{machinename}/TopLevelSearch/">
<IndexAttributeFields>
<add Name="Name"/>
<add Name="bodyText"/>
<add Name="tags"/>
<add Name="themes"/>
<add Name="parentID"/>
</IndexAttributeFields>
<IncludeNodeTypes>
<add Name="ArticlePage" />
</IncludeNodeTypes>
</IndexSet>
Затем вы должны создать в Индексатор Config/ExamineSettings.config
<add name="ExternalTopLevelIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"
supportUnpublished="false"
supportProtected="false"
interval="10"
analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"
indexSet="ExternalTopLevelSearchSet"/>
Теперь вы создаете поиска поставщика, а также в Config/ExamineSettings.config
<add name="ExternalTopLevelSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" indexSet="ExternalTopLevelSearchSet" enableLeadingWildcards="true"/>
Вот мой код C#, используя вышеприведенный «ExternalTopLevel».
public List<SearchResult> SearchResults
{
get
{
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["q"])) {
var searcher = ExamineManager.Instance.SearchProviderCollection["ExternalTopLevelSearcher"];
// Search criteria.
var searchCriteria = searcher.CreateSearchCriteria(BooleanOperation.Or);
var q = HttpContext.Current.Request.QueryString["q"].ToLower().Trim().Split(' ');
var contentType = HelperClass.GetContentTypeNodes().FirstOrDefault(item => q.Contains(item.Name.ToLower()));
q = q.Where(i => i.Length > 3).ToArray();
var query = searchCriteria
.GroupedOr(new[] { "nodeName" }, q.Select(x => x.Boost(150)).ToArray())
.Or()
.GroupedOr(new[] { "grid" }, q.Select(x => x.Boost(80)).ToArray())
.Or()
.GroupedOr(new[] { "tags", "themes", "institutions" }, q.Select(x => x.Boost(110)).ToArray());
// Search results
var searchResults = searcher.Search(query.Compile()).OrderByDescending(x => x.Score);
return searchResults.ToList();
}
return new List<SearchResult>();
}
}
Надеюсь, это поможет вам!
У вас есть это в Razor, если это возможно? – KlydeMonroe
Боюсь, что нет, но код похож. Я использовал его в Razor и переписал его в соответствии с архитектурой, которую я использую. – Mikkel
@ Миккель, я также новичок в изучении этого подхода. Если вы не используете бритву в этом примере, вы просто сохраняете это как файл класса, а просто ... компилируется на страницу?Спасибо – blackhawk