Azure搜索突出显示部分匹配

时间:2018-04-12 15:05:32

标签: azure-search hit-highlighting

我已经将Hit Highlighting打开,并且它适用于整个单词匹配。但是我们在用户指定的每个单词的末尾附加一个通配符,并且突出显示不适用于部分匹配。我们得到了结果,但.Highlights对象为null,因此没有突出显示可用于部分匹配。

以下是我们配置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”)* ^ 99.95

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

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

同样,查询会带回正确的结果,只是突出显示不适用于部分匹配。

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

2 个答案:

答案 0 :(得分:1)

感谢您报告此问题。

不幸的是,Azure搜索中的一个已知限制是,有时候广泛的通配符搜索不会突出显示匹配项。突出显示是搜索后的一个独立过程。检索到匹配的文档后,荧光笔会查找与通配符条件匹配的所有术语的搜索索引,并使用术语突出显示检索到的文档。对于广泛的通配符搜索查询,例如*(或*),由于性能原因,突出显示器仅基于其在语料库中的频率使用前N个最重要的术语。在您的示例中,&#39;他们&#39;和&#39;那里&#39;不包括在亮点可能是因为它们出现在大多数文档中。

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

希望这会有所帮助。如果您有任何其他问题,请与我们联系。

内特

答案 1 :(得分: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功能阻止部分突出显示工作吗?