2016-09-06 6 views
0

における最大値によってソートのは、私は2つの文書があるとしましょう:Elasticsearch:配列

{ 
    "id": "1234", 
    "things": [ 
    { 
     "datetime": "2016-01-01T12:00:00+03:00" 
    }, 
    { 
     "datetime": "2016-01-06T12:00:00+03:00" 
    }, 
    { 
     "datetime": "2100-01-01T12:00:00+03:00" 
    } 
    ] 
} 

{ 
    "id": "5678", 
    "things": [ 
    { 
     "datetime": "2016-01-03T12:00:00+03:00" 
    }, 
    { 
     "datetime": "2100-01-06T12:00:00+03:00" 
    } 
    ] 
} 

things.datetimeが{ "タイプ" としてマッピングされている: "日付"、「フォーマット":" date_time_no_millis "}。

これらのドキュメントは、将来の最新のthings.datetime値に基づいて並べ替える必要があります。

I.e.単純にmax things.datetimeでソートすると、2100-01-01T12:00:00 + 03:00と2100-01-06T12:00:00 + 03:00の日付が使用されます。 2016-01-06T12:00:00 + 03:00と2016-01-03T12:00:00 + 03:00という値に基づいて並べ替えを行いたいと思います。

ElasticSearch 2.xを使用してこれをどのように達成できますか?

私が試してみた:

"sort": { 
    "things.datetime": { 
    "order": "desc", 
    "mode": "max" 
    } 
} 

をしかし、それはでも2100年の日付でソートしていないようです。

また、私はそうのようなnested_filter使用しようとした:

"sort": { 
    "things.datetime": { 
    "order": "desc", 
    "mode": "max", 
    "nested_filter": { 
     "range": { 
     "things.datetime": { "lte": "now" } 
     } 
    } 
    } 
} 

しかし、私は期待通りには動作しません。

また、応答の「ソート」値は負の数です。だから、日付の文書のために:

"2015-10-24T05:50:00+03:00", 
"2015-10-26T22:05:48+02:00", 
"2015-10-24T08:05:43+03:00" 

負のソート値を取得します。

"sort": [ 
    -9223372036854775808 
] 

答えて

1

これを達成するための正しい方法があるように思わ:

"sort": { 
    "things.datetime": { 
    "order": "desc", 
    "mode": "max", 
    "nested_path": "things", 
    "nested_filter": { 
     "range": { 
     "things.datetime": { "lte": "now" } 
     } 
    } 
    } 
} 

もう日付が存在しない場合にはnested_filterの後に残すと、正しい順序を保証するためにソート値が負の数になります。

関連する問題