适用版本: 6.8-8.x
1. 错误异常的基本描述 #
[geo_polygon] unexpected token type [...] 说明 Elasticsearch 在解析 geo_polygon 查询时,当前读取到的 JSON token 与语法预期不一致。常见情况是本应读取点数组、对象或字段值时,结果遇到了错误层级的字段名、字符串、数字或其他 token。
常见现象 #
geo_polygon查询直接返回400。- 报错通常伴随
query does not support [...]或unexpected token type [...]。 - 多见于手写 DSL、模板渲染或不同 geo 表示法混用。
2. 为什么会发生这个错误 #
points、坐标数组或字段名的 JSON 层级写错。- 把对象写成数组,或把数组写成单个标量。
- 在
geo_polygon中混入该查询不支持的额外字段。 - 复制旧版本示例后,未按当前版本要求调整写法。
3. 排查步骤 #
- 直接检查
geo_polygon片段,确认字段层级、括号和数组结构是否正确。 - 只保留最小合法查询,例如字段名加标准点列表,确认主结构能否通过。
- 对照当前版本文档,确认
points、GeoJSON 或坐标表示法是否符合要求。 - 如果 DSL 由程序生成,打印最终 JSON,而不是只看模板。
- 如果同时报 unsupported field,优先删除不受支持的多余字段。
4. 修复建议 #
- 按当前版本文档重写
geo_polygon片段,确保字段层级、点格式和 JSON token 类型正确。 - 避免在同一个查询里混用不同坐标表示法。
- 不要在
geo_polygon中夹带无关字段。 - 给生成地理查询的代码增加结构校验,提前拦截非法 token。
5. 小结 #
这个异常的本质是 geo_polygon 的 JSON 结构不合法。只要缩小到该查询片段并验证 token 类型、字段层级和点数组格式,通常就能快速修复。
相关错误 #
- field-missing:geo 点字段缺失
- failed-to-parse-object-expected-start-object-but-was:对象解析失败
- failed-to-parse-request:请求解析失败
附:日志上下文 #
parser.getTokenLocation();
"[geo_polygon] query does not support [" + currentFieldName + "]"
);
}
} else {
throw new ParsingException(parser.getTokenLocation(); "[geo_polygon] unexpected token type [" + token.name() + "]");
}
}
GeoPolygonQueryBuilder builder = new GeoPolygonQueryBuilder(fieldName; shell);
if (validationMethod != null) {
// if GeoValidationMethod was explicitly set ignore deprecated coerce and ignoreMalformed settings





