我正在使用SpringData Elasticsearch 3.2,并且有一个文档包含一个非必填字段,称为DueDate。用户可以根据DueDate字段(如果已填充)对文档进行排序。
一旦创建索引并创建没有DueDate的文档,就会出现一个异常,指出尝试列出文档时索引中没有DueDate字段。如果我创建索引并创建到期日期的文档,则列表文档将按预期工作。
有没有一种方法可以强制索引(最好通过Java注释)具有DueDate字段,即使该值为null或列出文档时也不会抛出异常?
最佳答案
{
"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()-将日期转换为毫秒(数字)
编辑1:
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()将给出当前日期。如果您需要截止日期在最前面的文档,则使用它