首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Umbraco 7+搜索

Umbraco 7+搜索
EN

Stack Overflow用户
提问于 2016-06-13 10:38:38
回答 2查看 2K关注 0票数 1

我想知道是否有人能帮我..。我试图让检查搜索在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 =关键字,这会有效吗?

任何帮助都会很好。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 07:10:32

在Config/ExamineIndex.config中,您将创建一个新的IndexSet,其中包含您希望用户能够搜索的所有属性。

Umbraco.TypedSearch(Request.QueryString"query");将在整个页面中搜索任何内容,但如果正确设置了UmbracoExamine,则可以选择希望人们能够搜索的文档类型,也可以选择希望用户能够根据内容索引的属性类型。

例如:

代码语言:javascript
复制
<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中创建一个索引程序。

代码语言:javascript
复制
  <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中创建一个搜索提供程序

代码语言:javascript
复制
<add name="ExternalTopLevelSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
           analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" indexSet="ExternalTopLevelSearchSet" enableLeadingWildcards="true"/>

下面是使用上面所示的"ExternalTopLevel"-searcher的ExternalTopLevel代码。

代码语言:javascript
复制
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>();
            }
        }

希望这能帮到你!

票数 2
EN

Stack Overflow用户

发布于 2016-06-13 12:40:34

我认为您可以从Umbraco内部创建一个部分视图宏,并选择一个能够工作的搜索片段。然后,可以在模板文件中执行@Html.RenderMacro(“别名”)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37787584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档