Elasticsearch - 如何在排序后应用大小

时间:2016-12-25 08:51:23

标签: elasticsearch

我有一个过滤日期范围和术语的查询,选择从“位置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]。

2 个答案:

答案 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
}