2

Azure 搜索支持使用全文搜索突出显示,这有助于客户端在返回的文档中找到匹配的术语。我在下面提供了一个简单的索引模式来说明这个问题。

{
"name": "simple-index", 
"fields": [
    {
        "name": "key",
        "type": "Edm.String"
    },
    {
        "name": "simplefield",
        "type": "Edm.String"
    }
],
"scoringProfiles": [
    {
        "name": "boostedprofile",
        "functionAggregation": null,
        "text": {
            "weights": {
                "simplefield": 5,
            }
        },
        "functions": []
    }
],
"corsOptions": null,
"suggesters": [],
"analyzers": [],
"tokenizers": [],
"tokenFilters": [],
"charFilters": []
}

对于像下面这样的普通搜索查询,它按预期工作并返回预期结果。

search=foobar&highlight=simplefield

在将上述查询扩展为使用通配符查询时,事情再次与预期的一样,响应中包含与前缀匹配的术语的突出显示。到目前为止,一切都很好。

search=foo*&highlight=simplefield&querytype=full

在此之后,当我在上一个查询之上应用评分配置文件时,结果出乎意料,并且没有返回任何亮点。

search=foo*&highlight=simplefield&querytype=full&scoringprofile=boostedprofile

使用评分配置文件时,如何使突出显示适用于通配符查询?

4

1 回答 1

3

在回答时,这是Azure 搜索中的一个已知限制,当与评分配置文件一起使用时,突出显示不适用于通配符查询。在内部,Azure 搜索使用荧光笔的概念,它负责将高亮流作为搜索后发生的单独过程。

在通配符查询的情况下,它涉及在索引中查找与提供的前缀术语匹配的所有术语,然后使用它们来组成突出显示的文本。评分配置文件会影响在索引中查找术语以进行突出显示的方式。因此,结果不包括任何亮点。

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

我希望这是有用的。请对反馈项目进行投票,以帮助我们优先考虑我们的开发工作,以支持支持上述用例的其他突出显示模式。https://feedback.azure.com/forums/263029-azure-search/suggestions/32661961-implement-other-highlighters

于 2019-02-28T03:25:41.280 回答