elasticsearch - Elasticsearch脚本对缺少的字段进行排序

标签 elasticsearch

我正在尝试根据我的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/

相关文章:

elasticsearch - 如何在 Elastic 搜索中进行短语搜索?

elasticsearch - ElasticSearch:使用edge_ngram和模糊性进行部分/完全评分

python - Elasticsearch 日期范围未返回任何命中

arrays - Elasticsearch Kibana中的映射数组(文本,数据)

elasticsearch - 存储JSON数组字符串elasticsearch Bug

每个文档的 Python elasticsearch DSL 聚合/嵌套值度量

elasticsearch - 如何在像Elastic这样的搜索引擎中使用许多联接来管理SQL查询?

elasticsearch - Elasticsearch数据表示

node.js - Elasticsearch 中的条件排序

scala - 使用 elastic4s 从原始 JSON 创建索引