1

我想知道是否有人可以帮助我......我正在尝试让检查搜索在 Umbraco 7.3 中工作,但我正在努力处理文档。

https://our.umbraco.org/documentation/Reference/Searching/Examine/quick-start

当我查看以下文件 ExamineSettings.config 和 ExamineIndex.config 时,它们似乎已经指定了 ExternalIndexer、ExternalSearcher 和 ExternalIndexSet。我想这是对 4.11 的增强,该文档似乎是为它编写的。

但这是我似乎迷路之后的部分......剃刀部分是局部视图吗?完整的代码需要是什么?

我假设如果它是部分视图,我会创建一个页面来包含部分视图 @(Html.Partial("searcher"))

如果我查看了该页面并附加了一个查询字符串 ~/?query=keyword 这会起作用吗?

任何帮助都会很棒。

提前致谢

4

2 回答 2

2

在 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"/>

这是我使用上面显示的“ExternalTopLevel”搜索器的 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>();
            }
        }

希望这可以帮助你!

于 2016-06-14T07:10:32.160 回答
1

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

于 2016-06-13T12:40:34.507 回答