📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 6.8-8.9

简要来说,当Elasticsearch查询中的source字段包含空对象{}时,会发生此错误。Elasticsearch期望在source字段中有具体的字段或通配符,而不是空对象。要解决此问题,您可以从source字段中删除空对象,或者将其替换为要检索的具体字段。或者,如果要检索所有字段,可以在source字段中使用通配符(*)。

日志上下文 #

日志 “source definition may not contain [{}]” 的类名是 MultiGetRequest.java. 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考:

if ("includes".equals(currentFieldName) || "include".equals(currentFieldName)) {
 currentList = includes != null ? includes : (includes = new ArrayList<>(2));
 } else if ("excludes".equals(currentFieldName) || "exclude".equals(currentFieldName)) {
 currentList = excludes != null ? excludes : (excludes = new ArrayList<>(2));
 } else {
 throw new ElasticsearchParseException("source definition may not contain [{}]"; parser.text());
 }
 } else if (token == Token.START_ARRAY) {
 while ((token = parser.nextToken()) != Token.END_ARRAY) {
 currentList.add(parser.text());
 }