1.概述

Elasticsearch 7.x 版本在 SQL 支持方面进行了显著增强,使得用户能够更加方便地使用 SQL 语句来查询和操作 Elasticsearch 中的数据。以下是一些关键的新特性:

  1. 更丰富的 SQL 支持:Elasticsearch 7.x 版本扩展了对标准 SQL 查询语句的支持,包括对 JOIN 操作的支持(尽管有限制,仅支持特定类型的 JOIN)。此外,可能还增强了对窗口函数(Window Functions)或分组后的分析函数(Analytic Functions)的支持。

  2. 性能优化:SQL 查询引擎的性能得到了提升,查询延迟降低,大规模数据集下的查询效率提高。

  3. 改进的兼容性:改进了对不同 SQL 方言的理解和转换,使得从其他关系型数据库迁移到 Elasticsearch 更加平滑。

  4. API 更新:Elasticsearch 提供了一个 SQL REST API 端点,允许用户发送 SQL 查询并获取 JSON 格式的结果。Java API 也得到了更新,可以通过 RestHighLevelClient 或其他客户端类来执行 SQL 请求。

  5. 响应数据格式介绍:可以通过 URL 参数或 HTTP 头信息设置响应数据的格式,如 CSV、JSON、TSV、TXT、YAML、CBOR 和 SMILE 等。

  6. 与其他 DSL 结合:SQL 语句可以与其他查询语句结合使用,例如查询特定价格范围内的数据。

  7. Java 代码实现 SQL 功能:如果需要在代码中实现 SQL 功能,可能需要 Elasticsearch 的白金版许可。可以通过 JDBC 连接 Elasticsearch 并执行 SQL 语句。

  8. SQL 翻译:SQL 语句实际上是被转换成 Elasticsearch 的查询语句来执行的,可以使用 translate 端点来查看底层的查询语句。

  9. 跨集群搜索:引入了 ccs_minimize_roundtrips 模式,减少了网络开销。

  10. 新的集群协调实现:改进了集群协调子系统,提高了选主速度。

  11. 支持较小的堆内存:添加了新的熔断器,更好地追踪内存使用量,避免节点异常。

  12. 跨集群复制(CCR):支持跨机房、跨地区情况下的集群数据同步。

  13. Rank features:新增了 rank_featurerank_features 数据类型,用于对排序打分进行干预。

  14. Script score query:引入了 script_score 查询的别名 function_score2,提供了更好的扩展性。

2.快速入门

POST /_sql?format=txt
{
    "query": "SELECT * FROM tvs"
}

3.启动方式

  • http 请求
  • 客户端:elasticsearch-sql-cli.bat
  • 代码

4.sql 翻译

POST /_sql/translate
{
    "query": "SELECT * FROM tvs "
}

返回:

{
  "size": 1000,
  "_source": false,
  "stored_fields": "_none_",
  "docvalue_fields": [
    {
      "field": "brand"
    },
    {
      "field": "color"
    },
    {
      "field": "price"
    },
    {
      "field": "sold_date",
      "format": "epoch_millis"
    }
  ],
  "sort": [
    {
      "_doc": {
        "order": "asc"
      }
    }
  ]
}

5.与其他 DSL 结合

POST /_sql?format=txt
{
    "query": "SELECT * FROM tvs",
    "filter": {
        "range": {
            "price": {
                "gte" : 1200,
                "lte" : 2000
            }
        }
    }
}
09-23 15:47