sorting - Elasticsearch:如何搜索、排序、限制结果然后再次排序?

标签 sorting elasticsearch

这与多级排序无关。

我需要首先按距离选择我的结果,限制为 50 个,然后将这 50 个按价格排序。

select * 
from
(
select top 50 * from mytable order by distance asc)
)
order by price asc

本质上,第二种排序丢弃了内部排序的顺序 - 但内部排序用于磨练前 50 个结果。

对于这类问题,我看到的其他答案着眼于二级排序,这不是我所追求的。

顺便说一句:我查看了聚合 - 前 N 个结果,但我不确定我是否可以对聚合结果排序应用排序。还查看了 rescore,但我不知道将“排序”放在哪里

最佳答案

热门点击聚合将允许您在单独的字段上进行排序,在您的情况下,price 来自主查询排序(在 distance 上)。 See the documentation here了解如何在热门点击聚合中指定排序。

它看起来有点像这样(假设 distance 是 double 类型;如果是地理位置类型,请使用 Volodymyr Bilyachat 提供的 the documentation。)

{
   "sort":[
      {
         "distance":"asc"
      }
   ],
   "query":{
      "match_all":{}
   },
   "size":50,
   "aggs":{
      "top_price_hits":{
         "top_hits":{
            "sort":[
               {
                  "price":{
                     "order":"asc"
                  }
               }
            ],
            "size":50
         }
      }
   }
}

但是,如果您只希望从主要查询中获得 50 个结果,为什么不直接在应用程序客户端中进行排序呢?这将是一种更好的方法,因为将热门点击聚合用于二级排序是对其目的的轻微滥用。

应用程序内方法会更稳健。

关于sorting - Elasticsearch:如何搜索、排序、限制结果然后再次排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968893/

相关文章:

python - 按第二个元素对元组列表进行排序,这是一个列表

java - 使用 Java Stream API 对数组进行部分降序排序

elasticsearch - Filebeat 7.5.1是否缺少自定义索引名配置的步骤?

elasticsearch - 函数评分查询elasticsearch解析错误

java - 在Java中对数组进行递归排序,偶数出现在数组前面。

android - 按日期对 ListView 进行排序?

c - 使用具有结构的指针 C 的选择排序

elasticsearch - 在索引上的Elasticsearch中调用_search API时出错

java - elasticsearch 禁用词频评分

elasticsearch - 当 Auditbeat 的输出关闭时会发生什么