【问题标题】:Azure Search Highlight Partial MatchAzure 搜索突出显示部分匹配
【发布时间】:2018-09-22 19:24:45
【问题描述】:

我已经打开了“点击突出显示”,它对整个单词匹配都很有效。但是我们在用户指定的每个单词的末尾附加了一个通配符,并且突出显示不适用于部分匹配。我们正在返回结果,但 .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”不在结果中),“他们”、“那里”等也没有任何突出显示。

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

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

【问题讨论】:

    标签: azure-cognitive-search hit-highlighting


    【解决方案1】:

    感谢您报告问题。

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

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

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

    内特

    【讨论】:

    • 见我下面关于提升功能的回复。
    【解决方案2】:

    感谢回复,不过好像不是问题,好像是我搜索的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 功能会阻止部分突出显示吗?

    【讨论】:

    • 你最终得到任何答案或解决这个问题了吗?我似乎正在经历同样的事情。
    • 不,我们没有得到答案,因为它仍然被列为错误。在我们从 Azure 取回结果后,我们最终使用 javascript 来突出显示结果。
    • 感谢您的帮助!,当您说列为错误时,您的意思是在某个地方公开吗?如果是这样的话,你有一个链接吗?
    • 我认为当我说“错误”时我说错了,因为他们在下面的回复中说“这是一个已知的限制”
    • 没错,但我的意思是,在我们的两个案例中,它不仅仅是通配符搜索,而是它加上评分配置文件的组合。奇怪的是还没有人回答。
    猜你喜欢
    • 2015-08-11
    • 2015-10-27
    • 1970-01-01
    • 2015-03-06
    • 2019-10-20
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多