首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elastic Search中排序获取前N条记录,再次排序

问在Elastic Search中排序获取前N条记录,再次排序
EN

Stack Overflow用户
提问于 2019-02-14 07:54:40
回答 1查看 666关注 0票数 3

是否可以按字段A对所有文档进行排序?获取前N条记录,然后在ElasticSearch中再次按字段B对所有记录进行排序?

到目前为止,我尝试的内容如下所示,但没有按fieldB排序

代码语言:javascript
复制
{  
    "query":{  
     "bool":{  
     "must":[  
        {  
           "match_all":{  

           }
        }
     ],
     "must_not":[  

     ],
     "should":[  

     ]
  }
},
"from":0,
"size":20,
"sort":[  
{
  "FieldA": {
    "missing": "_last",
    "order": "desc"
  }
}, 
{
  "FieldB": {
    "missing": "_last",
    "order": "desc"
  }
}
],
 "aggs":{  

 }
}

等价的SQL应该是

代码语言:javascript
复制
SELECT * FROM (SELECT TOP 250 FROM TABLE ORDER BY FieldA) ORDER BY FieldB 

在Elasticsearch 5.3上运行

EN

回答 1

Stack Overflow用户

发布于 2019-02-25 19:32:52

我从这个question中找到了这个解决方案。

基本上,我们希望对表进行排序,得到前N个结果,然后再次排序,然后再对另一列进行排序。该查询看起来也类似于下面的内容。

我们将首先根据fieldA排序,取前50名,然后将其传递给fieldB进行排序。

代码语言:javascript
复制
{
   "sort":[
      {
         "FieldA": {
           "missing": "_last",
           "order": "desc"
         }
      }
   ],
   "query":{
      "match_all":{}
   },
   "size":50,
   "aggs":{
      "top_fieldB_hits":{
         "top_hits":{
            "sort":[
               {
                  "FieldB": {
                    "missing": "_last",
                    "order": "desc"
                   }
               }
            ],
            "size":50
         }
      }
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54681253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档