是否可以在ElasticSearch中按字段A排序前N个记录对所有文档进行排序,然后再次按字段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上运行
答案 0 :(得分:0)
我从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
}
}
}
}