使用Solr 5.4.1进行SolrNet突出显示

时间:2016-06-20 16:20:27

标签: solr

早上好

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

我的观点模型

   [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的片段

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

请指导

1 个答案:

答案 0 :(得分: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()));
}

在迭代突出显示时,您可以看到每个结果是代码段,但ID将是唯一键。然后,在每个 h 中,您将获得一个KeyValuePair,其中 h.Key 是您要查找的字段,即标题。 h.Value 是返回的所有代码段的列表,因为您可以拥有多个代码段。如果你得到第一个,你应该没事。

参见参考资料 https://github.com/mausch/SolrNet/blob/master/Documentation/Highlighting.md