【发布时间】:2020-12-10 08:08:58
【问题描述】:
在同行业的公司中,我需要选择收入最高的前 5 家公司,以及哪个公司在该行业中排名。 编写第一个查询很容易:
GET myIndex/_search
{
"from": 0,
"size": 5,
"query": {
"match": {
"industryCode": "xxxx"
}
},
"sort": [
{
"revenue": {
"order": "desc"
}
}
]
}
但我不知道如何编写第二个查询。目前,我必须使用滚动功能来扫描同行业公司的所有记录,如下所示:
async Task<int> GetRank()
{
int rank = 0;
searchRequest.Size = 500;
searchRequest.From = 0;
searchRequest.Scroll = "1m";
var rs = await _elasticClient.SearchAsync<Tmp>(searchRequest);
while (rs.Documents.Count > 0)
{
foreach (var item in rs.Documents)
{
rank++;
if (item.OrganCode == request.OrganCode) return rank;
}
rs = _elasticClient.Scroll<Tmp>("1m", rs.ScrollId);
}
return rank;
}
这种方法真的很慢,如果公司收入很低,可能需要几分钟才能产生结果。有没有办法解决这个问题?非常感谢!!!
【问题讨论】:
标签: c# elasticsearch nest