Azure搜索。如何在分页时获得结果计数

时间:2017-04-20 10:25:30

标签: azure azure-search

假设我在Azure搜索集合中有以下架构,有100条记录。

{
"id": '1',
"Status" : "Available",
"name" : "demo 1"
},
{
"id": '2',
"Status" : "Available",
"name" : "demo 1"
},
{
"id": '3',
"Status" : "Removed",
"name" : "demo 1"
},
{
"id": '4',
"Status" : "Booked",
"name" : "demo 4"
}

在“我的状态”字段中,我可以有三个不同的值, "预订","可用","删除"。

现在,我使用Azure搜索中的Skip和Top通过分页获取数据。

然而,与ElasticSearch Aggregation函数一样,Azure搜索中是否有一种方法可以获得状态为Booked,Available或not removed等的网站总数。 因为我无法在客户端进行计数,因为我将限制所有记录,而不是Azure搜索中的所有记录。

2 个答案:

答案 0 :(得分:2)

如果您使用搜索索引客户端对象( Microsoft.Azure.Search.SearchIndexClient )搜索文档,则可以提供一个对象作为参数( Microsoft.Azure.Search .Models.SearchParameters ),其中包含属性IncludeTotalResultCount。一旦将此属性设置为true并调用传递参数对象的方法Documents.Search(...),响应对象( Microsoft.Azure.Search.DocumentSearchResult )将包含属性Count的值,考虑到筛选器的总计数,无论分页选择了多少个项目。

SearchParameters searchParameter = new SearchParameters
    {
        Filter = "organizationId eq '1'",
        Skip = 0,
        Top = 20,
        IncludeTotalResultCount = true
     };
     using (var client = new SearchIndexClient(...)
     {
        DocumentSearchResult response = client.Documents.Search("*", searchParameter);

        //pagination items
        var collection = response.Results.ToArray();

        //total items
        var counter = response.Count;
     }

答案 1 :(得分:1)

创建索引时,请设置status字段facetablefilterable。然后使用$filter=status ne 'Booked'发布有关状态的构面查询。除了分页之外,这将为您提供除预订之外的每个状态类别中的文档总数。