Azure 搜索服务中的命中突出显示
Hit Highlighting in Azure Search Service
我是 Azure 搜索服务的新手,我想使用 Azure 搜索服务的命中突出显示功能。我正在使用 .NET SDK NuGet 包进行 azure 搜索。
我使用 SearchParameter 对象来提及命中高亮字段以及我需要的 Pre 和 Post 标签。
searchParameters.HighlightFields = new[] { "Description"};
searchParameters.HighlightPreTag = "<b>";
searchParameters.HighlightPostTag = "</b>";
_searchIndexClient.Documents.Search(searchText, searchParameters);
我期待这样的事情:
搜索文本:最佳
结果(描述):最佳产品
问题是我没有看到使用命中高亮的结果 with/without 有任何差异。 (描述字段是可搜索的)
我错过了什么吗?
通过 SearchResultBase
class 的 Highlights
属性 显示命中突出显示结果:link
亮点 属性 仅包含完整字段值的一部分。如果要显示完整的字段值,则必须将突出显示合并到您的字段值中。
这是适合我的片段:
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("<b>", "<b>").Replace("</b>", "</b>"));
}
在视图中你可以这样使用它:
@model SearchResult<MySearchDocument>
@Html.Highlight(nameof(MySearchDocument.Name), Model)
我是 Azure 搜索服务的新手,我想使用 Azure 搜索服务的命中突出显示功能。我正在使用 .NET SDK NuGet 包进行 azure 搜索。
我使用 SearchParameter 对象来提及命中高亮字段以及我需要的 Pre 和 Post 标签。
searchParameters.HighlightFields = new[] { "Description"};
searchParameters.HighlightPreTag = "<b>";
searchParameters.HighlightPostTag = "</b>";
_searchIndexClient.Documents.Search(searchText, searchParameters);
我期待这样的事情:
搜索文本:最佳
结果(描述):最佳产品
问题是我没有看到使用命中高亮的结果 with/without 有任何差异。 (描述字段是可搜索的)
我错过了什么吗?
通过 SearchResultBase
class 的 Highlights
属性 显示命中突出显示结果:link
亮点 属性 仅包含完整字段值的一部分。如果要显示完整的字段值,则必须将突出显示合并到您的字段值中。
这是适合我的片段:
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("<b>", "<b>").Replace("</b>", "</b>"));
}
在视图中你可以这样使用它:
@model SearchResult<MySearchDocument>
@Html.Highlight(nameof(MySearchDocument.Name), Model)