我正在尝试根据我的ES索引中的两个值运行脚本排序。但是ES抛出以下异常。我尝试添加if条件以避免没有这些值的文档,但是脚本似乎仍然无法正常工作。
SearchRequest searchRequest = new SearchRequest(IndexName);
Script script = new Script("((doc['bio.stop'].value - doc['bio.start'].value));");
SortBuilder sizeSortBuilder = SortBuilders.scriptSort(script, ScriptSortBuilder.ScriptSortType.NUMBER);
searchRequest.source(searchSourceBuilder);
SearchResponse matchAllResponse = client.search(searchRequest,RequestOptions.DEFAULT);
异常(exception):"lang":"painless","caused_by":{"type":"illegal_state_exception","reason":"A document doesn't have a value for a field! Use doc[<field>].size()==0 to check if a document is missing a field!"}
所以我在脚本中添加了if条件,以确保ES不会失败。但是排序不适用于这种方法。语法对我的预期用例是否正确? Script script = new Script(if(doc['bio.stop'].size() >0 && doc['bio.start'].size() >0) return (doc['bio.stop'].value - doc['bio.start'].value));
最佳答案
我能够稍加修改就能使上述脚本正常工作。答案可能会在将来对某人有所帮助。
Script script = new Script("(doc['bio.stop'].size() >0 && doc['bio.start'].size() >0) ? (doc['bio.stop'].value - doc['bio.start'].value) : 0");
关于elasticsearch - Elasticsearch脚本对缺少的字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63182948/