【发布时间】:2017-08-03 08:52:25
【问题描述】:
我了解 Azure 搜索使用 TF-IDF 算法进行排名和评分。不幸的是,这给我们带来了返回结果的问题,到目前为止,自定义评分配置文件的调整对我们没有帮助。
这是一个问题的例子:
为简单起见,假设我们的搜索文档只有两个字段 - IndividualName 和 EntityName。由于我们的源数据点的配置方式,许多我们的记录/文档(不是全部)在这两个字段中有重复数据。这对于我们的架构设置方式来说是不可避免的。
现在假设我们对 John Anderson 进行搜索。这是查询字符串:
searchMode=Any&search=+(%22John Anderson%22~3)&searchFields=IndividualName,EntityName&queryType=Full&$top=50&$count=true
假设我们在结果中有两个文档 - 一个在 IndividualName 和 EntityName 字段中有“Richard John Anderson”,第二个结果有 John Anderson,但仅在 IndividualName 字段中。 EntityName 字段为空。问题是 Richard John Anderson 文档的得分/排名高于 John Anderson 文档。我只能推测这是由于 TF-IDF 算法,它对 Richard John Anderson 的排名更高,因为它在文档中看到了两次。
您可以想象,这对我们来说毫无意义。我们必须能够将 John Anderson 文档恢复为排名最高的文档,因为这是搜索的名称,而不是 Richard John Anderson。
我们尝试了这个作为查询,看看它是否有帮助,但它没有:
search=+((IndividualName:"John Anderson" || EntityName:"John Anderson")^10 || (IndividualName:"John Anderson"~3 || EntityName:"John Anderson"~3))&searchFields=IndividualName,EntityName&queryType=Full
这就是为什么线程的主题行询问我们如何为我们的文档规避或减少对 TF-IDF 的重视。对我们来说,完全匹配比词频更重要。将 EntityName 字段排除在查询之外不是一种选择。我们已经尝试了一些自定义评分和字段提升,但到目前为止,无济于事。希望 MS Azure 搜索团队可以在这里提供帮助。