6

私は Azure Search Service を初めて使用し、Azure Search Service のヒットの強調表示機能を使用したいと考えていました。Azure Search に .NET SDK NuGet パッケージを使用しています。
SearchParameter オブジェクトを使用して、ヒット ハイライト フィールドと、必要な Pre タグと Post タグを指定しました。

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

私は次のようなものを期待しています:
SearchText: best
Result (Description) : The best product
問題は、ヒット ハイライトを使用しても使用しなくても、結果に違いが見られないことです。(説明フィールドは検索可能です)
何か足りないものはありますか?

4

2 に答える 2

7

ヒットの強調表示の結果は、クラスのHighlightsプロパティを介して公開されます:リンクSearchResultBase

于 2015-04-13T19:26:12.973 に答える
4

Highlights プロパティには、完全なフィールド値の一部のみが含まれています。完全なフィールド値を表示したい場合は、ハイライトをフィールド値にマージする必要があります。

ここで私のために働くスニペット:

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;
}

ASP.Net MVC の場合

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>"));
}

ビューでは、次のように使用できます。

@model SearchResult<MySearchDocument>
@Html.Highlight(nameof(MySearchDocument.Name), Model)
于 2016-07-13T08:14:20.757 に答える