У меня есть 2 поля в эластичном типе, а именно timeCreated
и timeUpdated
. Теперь мое дело в том, что мы всегда должны заказывать timeUpdated
, если это не null
(или вообще не существует), что, очевидно, оставляет нас с timeCreated
, то есть всегда.Упорядочить по времениОбновлено, если существует, в противном случае timeCreated
Теперь, когда я понимаю, как сортировка в elasticsearch работает, следующее не будет работать, потому что оно будет сортироваться по timeUpdated
AND timeCreated
вместе, а не так, как я и ищу.
"query": {
"match_all": {}
},
"sort": {
"timeUpdated": {"order": "desc", "missing": "_last"},
"timeCreated": {"order": "desc"}
}
Я не совсем уверен, возможно ли это или нет, но упругая является удивительным, так что я надеюсь, что это простая вещь, которую я пропустил в документации.
Я использую последнюю версию (1.6, я считаю) с помощью PHP, используя Elastica (хотя это делает нулевую разницу с исходным вопросом).
РЕДАКТИРОВАТЬ
В качестве примера, если у меня есть 3 документы:
1 - {"timeCreated": "2015-07-08T08:00:00Z"},
2 - {"timeCreated": "2015-05-08T10:00:00Z", "timeUpdated": "2015-07-09T08:00:00"}
3 - {"timeCreated": "2015-07-10T08:00:00Z"}
Порядок оно должно отображаться в должен быть 3, 2, 1
. То, что я получаю, - 2, 3, 1
.
То, что вы должны быть размещены именно то, что вам нужно. Это не работает? –
@AndreiStefan, насколько я понимаю, при таком подходе «нулевые» документы будут правы в «нижней части» списка, а затем этот «нижний» раздел «списка сортировки» будет отсортирован в соответствии с 'timeCreated'. Если мое понимание вокруг этого неверно, я явно что-то пропустил. – iLikeBreakfast
Ох, я вижу сейчас. Тогда вам нужна сортировка 'script'. –