在Azure搜索服务中点击突出显示

时间:2015-04-09 13:19:48

标签: c# azure azure-search hit-highlighting

我是Azure Search Service的新手,我想使用Azure搜索服务的点击突出显示功能。我使用.NET SDK NuGet包进行天蓝色搜索 我使用SearchParameter对象来提及命中突出显示字段以及我需要的前后标记。

searchParameters.HighlightFields = new[] { "Description"};
searchParameters.HighlightPreTag = "<b>";
searchParameters.HighlightPostTag = "</b>";
_searchIndexClient.Documents.Search(searchText, searchParameters);

我期待这样的事情:
SearchText:最好的 结果(说明):最佳产品
问题是我没有看到使用/不使用点击突出显示的结果有任何差异。 (描述字段是可搜索的)
我错过了什么吗?

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

Highlights属性仅包含完整字段值的一部分。如果要显示完整字段值,则必须将高亮显示合并到字段值中。

这是一个适合我的代码段:

*

对于ASP.Net MVC

public static string Highlight<T>(string fieldName, SearchResult<T> fromResult) where T : class
{
    var value = fromResult.Document.GetType().GetProperty(fieldName).GetValue(fromResult.Document, null) as string;

    if (fromResult.Highlights == null || !fromResult.Highlights.ContainsKey(fieldName))
    {
        return value);
    }

    var highlights = fromResult.Highlights[fieldName];

    var hits = highlights
        .Select(h => h.Replace("<b>", string.Empty).Replace("</b>", string.Empty))
        .ToList();

    for (int i = 0; i < highlights.Count; i++)
    {
        value = value.Replace(hits[i], highlights[i]);
    }

    return value;
}

在视图中,您可以像这样使用它:

public static MvcHtmlString Highlight<T>(this HtmlHelper htmlHelper, string fieldName, SearchResult<T> fromResult) where T : class
{
    var value = fromResult.Document.GetType().GetProperty(fieldName).GetValue(fromResult.Document, null) as string;

    if (fromResult.Highlights == null || !fromResult.Highlights.ContainsKey(fieldName))
    {
        return MvcHtmlString.Create(htmlHelper.Encode(value));
    }

    var highlights = fromResult.Highlights[fieldName];

    var hits = highlights
        .Select(h => h.Replace("<b>", string.Empty).Replace("</b>", string.Empty))
        .ToList();

    for (int i = 0; i < highlights.Count; i++)
    {
        value = value.Replace(hits[i], highlights[i]);
    }

    return MvcHtmlString.Create(htmlHelper.Encode(value).Replace("&lt;b&gt;", "<b>").Replace("&lt;/b&gt;", "</b>"));
}