如何使用单个查询获取弹性搜索中文档的排名?

Sah*_*rma 5 elasticsearch elasticsearch-aggregation

我们有弹性搜索索引,其中包含具有股票 ID 和价格的文档。

我们想要构建一个系统,用户将股票 ID 作为输入,然后它会返回该文档的排名。我有两个问题可以解决这个问题:

  1. 获取该 ID 的价格,然后使用百分位数排名聚合,如下所示。这将返回百分位值,即

    {
        "size": 0,
        "aggs" : {
            "load_time_ranks" : {
                "percentile_ranks" : {
                    "field" : "price", 
                    "values" : <price_of_given_id>
                }
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
      2.

获取该 id 的价格,过滤大于或等于该价格的汽车,然后使用值计数聚合,如下所示。这将返回确切的排名,即

{
"size": 0,
 "aggs": {
   "sort_score_aggs": {
     "filter": {
       "range": {
         "price": {
           "gte": <price_of_given_id>
         }
       }
     },
     "aggs": {
       "rank_count": {
         "value_count": {
           "field": "price"
         }
       }
     }
   }
}
}
Run Code Online (Sandbox Code Playgroud)

在上述两种方法中,我们必须发出两个弹性搜索请求,即首先获取该文档 ID 的价格,然后查询以获得百分位数或排名。有没有办法在一个查询中获得排名或者有更好的方法来解决这个问题?