我有一个过滤日期范围和术语的查询,选择从“位置0”开始的N个文档,然后对它们进行排序。但是,我希望在选择N个文档之前,在过滤之后进行排序。
我的查询:
{
'filter': {
'and': [
{
'range': {
'updated_at': {
'lte': 1482652799999,
'gte': 1481961600000
}
}
},
{
'term': {'name': 'my name'}
}
]
},
'sort': [
'updated_at', {'updated_at': 'desc'}
],
'size': 3,
'from': 0
}
此查询给了我: 批次1 = [12 / 17,12 / 17,112 / 15],并递增“从”值, 批次2 = [12 / 21,12 / 20,12 / 18],
但我想: 批次1 = [12 / 21,12 / 20,12 / 18]和 批次2 = [12 / 17,12 / 17,12 / 15]。
答案 0 :(得分:0)
它应该在过滤前应用排序。尝试将过滤器转换为查询,或至少转换为术语部分。它应该作为查询,排序,过滤执行。
答案 1 :(得分:0)
确定了查询的问题。 ES接受两种类型的排序格式 - 来自其文档(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html)的示例:
"sort" : [
{ "post_date" : {"order" : "asc"}},
"user",
{ "name" : "desc" },
{ "age" : "desc" },
"_score"
]
我的查询失败,因为它的语法错误(请参阅下面的“排序”键):
{
'filter': {
'and': [
{
'range': {
'updated_at': {
'lte': 1482652799999,
'gte': 1481961600000
}
}
},
{
'term': {'name': 'my name'}
}
]
},
'sort': {'updated_at': 'desc'} # vs ['updated_at', {'updated_at': 'desc'}]
'size': 3,
'from': 0
}