早上好
我能够保留断点并查看结果。亮点
我的观点模型
[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的片段
看起来我必须遍历结果。每个字段都有亮点?
请指导
答案 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