Необходимо создать сопоставление перед индексацией документов. Вы по-прежнему сможете индексировать документы, если в отображении отсутствует поле.
Использовать сценарии при сортировке (его производительность будет меньше, чем в варианте 1).
{
"query": {
"match_all": {}
},
"sort" : {
"_script" : {
"type" : "number",
"script" : {
"lang": "painless",
"source": "if(doc['dueDate'].size()!=0){doc['dueDate'].value.getMillis()}"
},
"order" : "desc"
}
}
}
if (doc ['dueDate']. Size ()! = 0) -> проверить, существует ли поле.
doc ['dueDate']. Value.getMillis ()- преобразует дату в миллисекунды (число)
EDIT1:
GET index27/_search
{
"query": {
"match_all": {}
},
"sort": [{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"inline": "if(doc['dueDate'].size()!=0) { return doc['dueDate'].value.getMillis();} else{ new Date().getTime();}"
},
"order": "asc"
}
}]
}
new Date (). getTime () выдаст текущую дату. Используется в случае, если вам нужны документы с датой исполнения, которая должна быть наверху