Elasticsearch SQL 在 WHERE 和 ORDER BY 子句中不支持对嵌套字段使用标量函数,除了比较和逻辑运算符。这意味着您无法直接在这些子句中使用诸如 sqrt()abs() 等函数。例如,以下查询将无法正常工作:

SELECT * FROM my_index WHERE sqrt(nested_field.sub_field) > 10;

可以使用 Elasticsearch 的脚本查询来解决此问题。在脚本查询中,可以使用 Painless 脚本语言来执行任何所需的操作,包括对嵌套字段应用标量函数。以下是一个示例脚本查询,其中使用了标量函数:

POST /_search
{
  "query": {
    "script": {
      "script": {
        "source": "doc['nested_field.sub_field'].value * 2 > params.param1",
        "params": {
          "param1": 10
        }
      }
    }
  }
}

在此示例中,我们使用了标量函数,即乘以 2,对嵌套字段进行比较。可以将此脚本查询用作替代方法,以避免使用 Elasticsearch SQL 中不支持的标量函数。

Elasticsearch SQL 嵌套字段标量函数使用限制与解决方法

原文地址: https://www.cveoy.top/t/topic/mupz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录