是否可以按字段A对所有文档进行排序?获取前N条记录,然后在ElasticSearch中再次按字段B对所有记录进行排序?
到目前为止,我尝试的内容如下所示,但没有按fieldB排序
{
"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应该是
SELECT * FROM (SELECT TOP 250 FROM TABLE ORDER BY FieldA) ORDER BY FieldB 在Elasticsearch 5.3上运行
发布于 2019-02-25 19:32:52
我从这个question中找到了这个解决方案。
基本上,我们希望对表进行排序,得到前N个结果,然后再次排序,然后再对另一列进行排序。该查询看起来也类似于下面的内容。
我们将首先根据fieldA排序,取前50名,然后将其传递给fieldB进行排序。
{
"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
}
}
}
}https://stackoverflow.com/questions/54681253
复制相似问题