2

我有一个过滤日期范围和术语的查询,从from位置 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, 12/15],并增加“从”值,批次 2= [12/21, 12/20, 12/18],

但我想要:

批次 1= [12/21, 12/20, 12/18] 批次 2= [12/17, 12/17, 12/15]。

4

2 回答 2

0

它应该在过滤器之前应用排序。尝试将您的过滤器转换为查询,或者至少是术语部分。它应该作为查询、排序、过滤来执行。

于 2016-12-26T00:57:07.713 回答
0

确定了查询的问题。ES 接受 2 种类型的排序格式 - 他们的文档中的一个示例(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
}
于 2016-12-26T06:20:56.827 回答