如何通过单个查询在弹性搜索中获得文档的排名?

时间:2018-06-20 14:11:57

标签: elasticsearch elasticsearch-aggregation

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

我们要构建一个系统,其中用户输入股票ID作为输入,并返回该文档的排名。我有两个查询可以解决这个问题:

  1. 获取该ID的价格,然后使用百分位等级聚合,例如here。这将返回百分比值,即

    {
        "size": 0,
        "aggs" : {
            "load_time_ranks" : {
                "percentile_ranks" : {
                    "field" : "price", 
                    "values" : <price_of_given_id>
                }
            }
        }
    }
    
      2。

获取该ID的价格,对大于或等于该价格的汽车进行过滤,然后使用here之类的价值计数组合。这将返回确切的排名,即

{
"size": 0,
 "aggs": {
   "sort_score_aggs": {
     "filter": {
       "range": {
         "price": {
           "gte": <price_of_given_id>
         }
       }
     },
     "aggs": {
       "rank_count": {
         "value_count": {
           "field": "price"
         }
       }
     }
   }
}
}

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

0 个答案:

没有答案