Azure搜索-较小面数未从索引返回

sbh*_*mra 2 c# asp.net azure azure-cognitive-search

我正在使用Azure搜索索引创建产品的多面搜索。我大约有5个方面可帮助筛选显示的产品列表。

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

例如(简单起见),如果我的索引中以下方面列出了以下汽车制造商:

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

我发现斯柯达将不会退货,因为与该制造商链接的搜索结果很少。

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

经过研究,我遇到了以下解释

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

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

基于以上引用,我如何人为地增加计数以解决此问题?还是有人知道更好的方法?

Bru*_*ton 8

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

facet=myfield,count:100
Run Code Online (Sandbox Code Playgroud)

如果您使用的是.NET SDK:

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

var results = indexClient.Documents.Search("*", parameters);
Run Code Online (Sandbox Code Playgroud)

您可以在《Azure搜索REST API参考》中找到有关构面表达式语法的更多详细信息。

  • 它是构面表达式本身的一部分。只需将它添加到`SearchParameters.Facets` 属性。我将编辑我的答案以包含一个示例。 (2认同)