Azure搜索 - 较小的方面计数未从索引

时间:2017-11-26 20:29:26

标签: c# asp.net azure azure-search

我正在使用Azure搜索索引来创建产品的分面搜索。我有大约5个方面来帮助过滤显示的产品列表。

我注意到的一件事是,如果列出了很多用于使用构面过滤的产品,则不会从索引返回属于构面的较小搜索项。

例如(简单来说),如果我的索引在一个方面列出了以下汽车制造商:

  • 奥迪(312)
  • 宝马(203)
  • 沃尔沃(198)
  • 斯柯达(4)

我会发现斯柯达不会被退回,因为有少量搜索结果链接到该制造商。

我可以看到使用此查询直接在Azure门户中搜索索引时就是这种情况:facet=<facet-field-name>

经过一些研究后,我发现了以下explanation

  

由于分片架构,分面计数可能不准确。每个搜索索引都有多个分片,每个分片按文档计数报告前N个方面,然后将其合并为一个结果。如果某些分片具有许多匹配值,而其他分片具有较少的匹配值,则可能会发现某些分面值在结果中缺失或计数不足。

     

虽然此行为可能随时发生变化,但如果您今天遇到此行为,则可以通过人为地夸大计数来解决这个问题:大量来强制执行每个分片的完整报告。如果count:的值大于或等于字段中唯一值的数量,则可以保证准确的结果。但是,当文档计数很高时,会有性能损失,因此请谨慎使用此选项。

基于以上引用,我如何人为地夸大计数来解决这个问题?或者有人知道更好的方法吗?

1 个答案:

答案 0 :(得分:6)

默认构面计数为10.您可以使用count参数指定更大的计数作为构面表达式的一部分。例如,假设您将REST API与HTTP GET请求一起使用:

facet=myfield,count:100

如果您使用的是.NET SDK:

var parameters =
    new SearchParameters()
    {
        Facets = new[] { "myfield,count:100" }
    };

var results = indexClient.Documents.Search("*", parameters);

您可以在Azure Search REST API Reference中找到有关构面表达式语法的更多详细信息。