【发布时间】:2019-02-25 19:32:51
【问题描述】:
是否可以按字段 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 上运行
【问题讨论】:
-
看起来搜索不错,排序应该按预期工作。你能举一个未排序响应的例子吗?
-
上述查询首先对FieldA上的文档进行排序,如果有多个相同值的记录,它将在FieldB上排序。我想基本上有类似 SELECT * FROM (SELECT TOP 250 FROM TABLE ORDER BY FieldA) ORDER BY FieldB 之类的东西,所以第二个 FieldB 是一个完整的重新排序。
-
所以如果我做对了,最初按 FieldA 排序的唯一原因是选择数据的子集。该子集的最终结果最终应按 FieldB 排序,对吗?
-
还有什么是
FieldA和FieldB的典型值? -
正确,第二次排序是基于第一次排序的结果。 FieldA 是整数,FieldB 是浮点数。
标签: elasticsearch