【问题标题】:SolrNet Highlighting with Solr 5.4.1Solr 5.4.1 的 SolrNet 突出显示
【发布时间】:2016-06-21 02:35:21
【问题描述】:

早安

我能够保留断点并查看结果。亮点

我的视图模型

   [SolrField("health_content_t")]
    public string HealthContent { get; set; }

    [SolrField("description_t")]
    public string Description { get; set; }

    [SolrField("title_t")]
    public string Title { get; set; }

    [SolrField("_fullpath")]
    public string PageUrl { get; set; }

我的控制器

var queryOption = new QueryOptions
            {
                FilterQueries = BuildFilterQueries(parameters),
                Rows = parameters.PageSize,
                Start = start,
                SpellCheck = new SpellCheckingParameters
                {
                    Collate = true
                },
                Highlight = new HighlightingParameters
                {
                    Fragsize = 250,
                    Fields = new[] { "*" },
                    BeforeTerm = "<b>",
                    AfterTerm = "</b>",
                    Snippets = 1
                }

            };

var results = _searchResults.Query(BuildQuery(parameters), queryOption);

view = new SearchView
{
      EntireSiteResults = results,
      Search = parameters,
      TotalCount = results.NumFound,
      DidYouMean = GetSpellCheckingResult(results)
};

我的观点

@foreach (var item in Model.EntireSiteResults)
    {
        <li>
            <h2><a href="@item.PageUrl">@item.Title</a></h2>
            <span class="sr-url"><a href="@item.PageUrl">@item.PageUrl</a></span>
            <p>@item.Description</p>
        </li>
    }

我不确定我是如何遍历结果的。我必须显示

标题、PageUrl,搜索词加粗,也显示healthContent的sn-p,搜索词加粗

看起来我必须遍历结果。每个字段的亮点?

请指教

【问题讨论】:

    标签: solr


    【解决方案1】:

    [注意:这个问题最初发布在 GitHub 上,但我建议向 SO 寻求更多答案]

    您必须首先指定要使用突出显示以及在哪些字段上。 * 是“好”,但如果您有许多不想突出显示的字段,则不是很好 - 也取决于您的 qf。但无论如何,您需要:

    在 QueryOptions 中设置突出显示参数并传递给 .Query() 然后当你得到你的结果时,你会得到没有高亮的 Title、PageUrl 和 Description。您需要遍历响应中的突出显示对象,该对象具有唯一键作为键,然后提取您要查找的突出显示字段。如果这令人困惑,请在查询后立即在行上放置一个断点 (var results = ...),然后检查 results.Highlights。

    一旦获得结果,您就可以按照文档页面中的说明进行迭代:

    foreach (var h in results.Highlights[results[0].Id]) {
        Console.WriteLine("{0}: {1}", h.Key, string.Join(", ", h.Value.ToArray()));
    }
    

    当您迭代突出显示时,您可以看到每个结果是 sn-p,id 将是唯一键。然后,在每个 h 中,您将获得一个 KeyValuePair,其中 h.Key 是您要查找的字段,即标题。 h.Value 是返回的所有 sn-ps 的列表,您可以拥有很多。拿到第一个应该没问题。

    查看参考 https://github.com/mausch/SolrNet/blob/master/Documentation/Highlighting.md

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多