版本: 7.12-8.9
简要地说,当您尝试在Elasticsearch中对不兼容SQL的函数使用类SQL语法时,会出现此错误。Elasticsearch支持SQL函数的子集,使用不支持的函数将导致此错误。要解决此问题,您可以使用Elasticsearch SQL语法支持的函数,或者使用原生Elasticsearch查询DSL(Query DSL),后者比SQL接口提供了更多的灵活性和功能。
日志上下文 #
日志 “Cannot use {} on non-SQL function {}” 的类名是 SqlFunctionResolution.java。我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考:
@Override
public Function buildResolved(UnresolvedFunction uf; Configuration cfg; FunctionDefinition def) {
if (def instanceof SqlFunctionDefinition) {
return ((SqlFunctionDefinition) def).builder().build(uf; cfg; true);
}
throw new ParsingException(uf.source(); "Cannot use {} on non-SQL function {}"; name(); def);
} @Override
public boolean isValidAlternative(FunctionDefinition def) {
return false; // think about this later.





