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]、「from」値をインクリメント、バッチ 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

クエリの問題を特定しました。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 に答える
0

フィルターの前に並べ替えを適用する必要があります。フィルターをクエリに変換するか、少なくとも用語の部分を変換してみてください。クエリ、ソート、フィルターとして実行する必要があります。

于 2016-12-26T00:57:07.713 に答える