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

版本: 6.8-8.9

简要来说,当Elasticsearch接收到结构错误的查询时会出现此错误。具体来说,它期望在JSON查询的start_object之后有一个字段,但未找到。要解决此问题,您应该检查查询语法以确保其格式正确。确保每个start_object都有对应的字段。此外,确保字段名拼写正确且存在于您的Elasticsearch索引中。最后,使用JSON验证器验证您的JSON查询以捕获任何语法错误。

日志上下文 #

日志"[_na] query malformed; no field after start_object"的类名是 AbstractQueryBuilder.java。我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入了解的人参考:

if (parser.nextToken() == XContentParser.Token.END_OBJECT) {
    // 我们遇到了查询子句的'{}';它曾经被支持;在5.0版本中弃用,在6.0版本中移除
    throw new IllegalArgumentException("query malformed; empty clause found at [" + parser.getTokenLocation() + "]");
}
if (parser.currentToken() != XContentParser.Token.FIELD_NAME) {
    throw new ParsingException(parser.getTokenLocation(), "[_na] query malformed; no field after start_object");
}
String queryName = parser.currentName();
// 移动到下一个START_OBJECT
if (parser.nextToken() != XContentParser.Token.START_OBJECT) {
    throw new ParsingException(parser.getTokenLocation(), "[" + queryName + "] query malformed; no start_object after query name");