3

我已经打开了 Hit Highlighting,它对整个单词匹配都很有效。但是我们在用户指定的每个单词的末尾附加了一个通配符,并且突出显示不适用于部分匹配。我们正在返回结果,但 .Highlights 对象为空,因此部分匹配无法使用高亮显示。

下面是我们如何配置 SearchParameters:

var parameters = new SearchParameters
{
    Filter = newFilter,
    QueryType = QueryType.Full,
    Top = recordsPerPage,
    Skip = skip,
    SearchMode = SearchMode.Any,
    IncludeTotalResultCount = true,
    HighlightFields = new List<string> { "RESULT" },
    HighlightPreTag = "<font style=\"color:blue; background-color:yellow;\">",
    HighlightPostTag = "</font>"
};
return parameters;

response = indexClient.Documents.Search<SearchResultReturn>(query, parameters);

这是我们的查询字符串的示例: ("the") the*^99.95

这个想法是我们搜索用户指定的确切字符串(多个单词),然后我们对指定的每个单词进行通配符搜索。

所以对于上面的例子,我们得到了所有包含“the”和“the*”的结果,但只有单词“the”有突出显示。即使“他们”是结果中唯一匹配的条目(“the”不在结果中),“他们”、“那里”等也没有任何突出显示。

查询再次返回正确的结果,只是突出显示不适用于部分匹配。

我是否需要其他一些设置才能突出显示部分匹配?

4

2 回答 2

2

感谢您报告问题。

不幸的是,Azure 搜索中的一个已知限制是,对于广泛的通配符搜索,有时不会突出显示匹配项。突出显示是搜索后的独立过程。一旦检索到匹配的文档,荧光笔就会在搜索索引中查找与通配符标准匹配的所有术语,并使用这些术语来突出显示检索到的文档。对于广泛的通配符搜索查询,如 a*(或 *),出于性能原因,荧光笔仅使用基于它们在语料库中的频率的前 N ​​个最重要的词。在您的示例中,“他们”和“那里”未包含在突出显示中,可能是因为它们出现在大多数文档中。

由于这是通配符查询的限制,一种解决方法是预处理索引以避免发出通配符/前缀查询。请查看自定义分析 ( https://docs.microsoft.com/en-us/rest/api/searchservice/custom-analyzers-in-azure-search ) 例如,您可以使用 edgeNgram tokenfilter 并存储前缀索引中的单词并发出带有前缀的常规术语查询(没有“*”运算符)

希望这可以帮助。如果您有任何其他问题,请告诉我。

内特

于 2018-04-16T17:07:48.993 回答
1

感谢您的回复,但似乎不是问题,这似乎是我在搜索时使用的 Boosting 功能的问题。

当我删除增强功能时,部分高亮显示按预期工作。当我在部分突出显示中添加增强功能时停止工作。你能确认这是一个错误吗?

这是我的增强功能:

"scoringProfiles":[{"name":"PreRiskBoost",
                    "text":null,"functions":     
                     [{"fieldName":"PreRiskCount", 
                      "freshness":null, 
                      "interpolation":"linear",
                      "magnitude":{"boostingRangeStart":1,
                                   "boostingRangeEnd":99,
                                   "constantBoostBeyondRange":true},
                      "distance":null,
                      "tag":null,
                      "type":"magnitude","boost":10}],
                      "functionAggregation":"sum"}],
                      "defaultScoringProfile":"PreRiskBoost"

您知道为什么拥有 Boosting 功能会阻止部分突出显示吗?

于 2018-04-16T19:17:52.727 回答