假设我在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搜索中的所有记录。
答案 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
字段facetable
和filterable
。然后使用$filter=status ne 'Booked'
发布有关状态的构面查询。除了分页之外,这将为您提供除预订之外的每个状态类别中的文档总数。