Umbraco 7+ 搜索
Umbraco 7+ Search
我想知道是否有人可以帮助我...我正在尝试让检查搜索在 Umbraco 7.3 中工作,但我正在努力处理文档。
https://our.umbraco.org/documentation/Reference/Searching/Examine/quick-start
当我查看以下文件 ExamineSettings.config 和 ExamineIndex.config 时,它们似乎已经指定了 ExternalIndexer、ExternalSearcher 和 ExternalIndexSet。我想这是 4.11 的增强功能,该文档似乎是为此而编写的。
但是我似乎迷路了之后的部分...Razor 部分是局部视图吗?完整的代码需要是什么?
我会假设如果它是局部视图我会创建一个页面来包含局部视图@(Html.Partial("searcher"))
如果我查看页面并附加查询字符串 ~/?query=keyword 这会起作用吗?
任何帮助都会很棒。
提前致谢
我认为您可以从 Umbraco 内部创建一个局部视图宏和 select 一个可以工作的搜索片段。然后,您可以在模板文件中执行 @Html.RenderMacro("alias")。
在 Config/ExamineIndex.config 中,您创建一个新的索引集,其中包含您希望用户能够搜索的所有属性。
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"/>
这是我使用上面显示的 "ExternalTopLevel"-searcher 的 C# 代码。
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>();
}
}
希望对您有所帮助!
我想知道是否有人可以帮助我...我正在尝试让检查搜索在 Umbraco 7.3 中工作,但我正在努力处理文档。
https://our.umbraco.org/documentation/Reference/Searching/Examine/quick-start
当我查看以下文件 ExamineSettings.config 和 ExamineIndex.config 时,它们似乎已经指定了 ExternalIndexer、ExternalSearcher 和 ExternalIndexSet。我想这是 4.11 的增强功能,该文档似乎是为此而编写的。
但是我似乎迷路了之后的部分...Razor 部分是局部视图吗?完整的代码需要是什么?
我会假设如果它是局部视图我会创建一个页面来包含局部视图@(Html.Partial("searcher"))
如果我查看页面并附加查询字符串 ~/?query=keyword 这会起作用吗?
任何帮助都会很棒。
提前致谢
我认为您可以从 Umbraco 内部创建一个局部视图宏和 select 一个可以工作的搜索片段。然后,您可以在模板文件中执行 @Html.RenderMacro("alias")。
在 Config/ExamineIndex.config 中,您创建一个新的索引集,其中包含您希望用户能够搜索的所有属性。
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"/>
这是我使用上面显示的 "ExternalTopLevel"-searcher 的 C# 代码。
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>();
}
}
希望对您有所帮助!