我们具有弹性搜索索引,其中包含具有股票编号和价格的文档。
我们要构建一个系统,其中用户输入股票ID作为输入,并返回该文档的排名。我有两个查询可以解决这个问题:
获取该ID的价格,然后使用百分位等级聚合,例如here。这将返回百分比值,即
{
"size": 0,
"aggs" : {
"load_time_ranks" : {
"percentile_ranks" : {
"field" : "price",
"values" : <price_of_given_id>
}
}
}
}
获取该ID的价格,对大于或等于该价格的汽车进行过滤,然后使用here之类的价值计数组合。这将返回确切的排名,即
{
"size": 0,
"aggs": {
"sort_score_aggs": {
"filter": {
"range": {
"price": {
"gte": <price_of_given_id>
}
}
},
"aggs": {
"rank_count": {
"value_count": {
"field": "price"
}
}
}
}
}
}
在上述两种方法中,我们必须发出两个弹性搜索请求,即首先获取该文档ID的价格,然后查询以获取百分位或排名。有没有办法在一个查询中获得排名,或者有什么更好的方法来解决这个问题?