Elasticsearch SQL与 Elasticsearch DSL

Elasticsearch 提供了两种主要的查询方式:Elasticsearch SQL (ES SQL) 和 Elasticsearch Domain-Specific Language (ES DSL)。这两种方式各有特点,适用于不同的场景。

1. Elasticsearch SQL (ES SQL)
  • 定义: ES SQL 是一种基于SQL的查询语言,允许用户使用类似于SQL的语法来查询Elasticsearch中的数据。
  • 特点 :
    • 易用性: 对于熟悉SQL的用户来说,学习成本较低。
    • 标准性: 支持标准SQL语法,如SELECT、FROM、WHERE等。
    • 功能性: 提供了丰富的聚合、排序、过滤等功能。
  • 适用场景: 适合需要快速构建报表、分析应用的场景,以及希望使用SQL进行查询的用户。
2. Elasticsearch DSL (ES DSL)
  • 定义: ES DSL 是一种JSON格式的查询语言,用于向Elasticsearch发送查询请求。
  • 特点 :
    • 灵活性: 提供高度定制化的查询能力。
    • 功能性: 支持复杂的查询和聚合操作。
    • 性能: 通常在性能敏感的应用中表现更优。
  • 适用场景: 适合需要高度定制化查询逻辑的应用程序开发。
3. SQL 与 ES SQL 之间的关系
  • 相似性: ES SQL 支持标准SQL语法,包括SELECT、FROM、WHERE等关键字。
  • 差异性 :
    • 数据模型: SQL通常用于关系型数据库,而Elasticsearch是一个面向文档的NoSQL数据库。
    • 查询能力: SQL支持复杂的JOIN操作,而ES SQL不直接支持JOIN,但可以通过子查询等方式模拟JOIN操作。
    • 性能考量: SQL查询可能涉及大量的表扫描,而ES SQL通常针对索引进行查询,性能较高。

如何查询Elasticsearch中的数据

使用 ES SQL 查询数据
  1. 安装和配置:

    • 确保Elasticsearch环境已经正确配置,并启用了ES SQL插件。
    • 可以通过Elasticsearch插件管理器安装支持ES SQL的插件。
  2. 发送查询:

    • 使用curl :

      bash 复制代码
      curl -X GET "localhost:9200/_sql?format=json" -H 'Content-Type: application/x-sql' -d 'SELECT * FROM books LIMIT 10'
    • 使用Python客户端 :

      python 复制代码
      from elasticsearch import Elasticsearch
      
      es = Elasticsearch()
      
      query = {
          "query": "SELECT * FROM books LIMIT 10"
      }
      
      response = es.search(index="_sql", body=query)
      
      print(response['hits']['hits'])
使用 ES DSL 查询数据
  1. 构建查询:

    • 使用JSON格式构建查询请求。
    • 查询可以非常复杂,包括过滤、排序、聚合等操作。
  2. 发送查询:

    • 使用curl :

      bash 复制代码
      curl -X GET "localhost:9200/books/_search" -H 'Content-Type: application/json' -d'
      {
        "query": {
          "match": {
            "author": "John Doe"
          }
        }
      }'
    • 使用Python客户端 :

      python 复制代码
      from elasticsearch import Elasticsearch
      
      es = Elasticsearch()
      
      query = {
          "query": {
              "match": {
                  "author": "John Doe"
              }
          }
      }
      
      response = es.search(index="books", body=query)
      
      print(response['hits']['hits'])

Elasticsearch 常用API

  • 用途: 用于执行全文搜索和聚合查询。

  • 示例 :

    json 复制代码
    {
      "query": {
        "match_all": {}
      }
    }
2. Get API
  • 用途: 用于获取单个文档。

  • 示例 :

    bash 复制代码
    curl -X GET "localhost:9200/books/_doc/1"
3. Index API
  • 用途: 用于创建或更新文档。

  • 示例 :

    bash 复制代码
    curl -X PUT "localhost:9200/books/_doc/1" -H 'Content-Type: application/json' -d'
    {
      "title": "The Great Gatsby",
      "author": "F. Scott Fitzgerald",
      "year": 1925
    }'
4. Delete API
  • 用途: 用于删除文档。

  • 示例 :

    bash 复制代码
    curl -X DELETE "localhost:9200/books/_doc/1"
5. Aggregations API
  • 用途: 用于执行聚合查询,如计算平均值、统计最大值等。

  • 示例 :

    json 复制代码
    {
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }

总结

Elasticsearch SQL (ES SQL) 和 Elasticsearch DSL (ES DSL) 是两种不同的查询方式,分别适用于不同的场景。ES SQL 提供了更接近SQL的查询方式,易于上手,适合快速构建报表和分析应用。ES DSL 则提供了高度定制化的查询能力,适用于需要复杂查询逻辑的应用程序开发。根据具体需求选择合适的查询方式,可以有效地利用Elasticsearch的强大功能。

相关推荐
果粒蹬i40 分钟前
Elasticsearch 单机部署实测:安装流程、常见坑点与远程访问配置
大数据·elasticsearch·搜索引擎
AC赳赳老秦44 分钟前
OpenClaw数据库高效操作指南:MySQL/PostgreSQL批量处理与数据迁移实战
大数据·数据库·mysql·elasticsearch·postgresql·deepseek·openclaw
祖传F871 小时前
quickbi数据集数据查询时间字段显示正确,仪表板不显示
数据库·sql·阿里云
悟道子HD2 小时前
SRC漏洞挖掘——2.SQL注入漏洞实战详解
sql·web安全·网络安全·渗透测试·sql注入·sqlmap·暴力破解
历程里程碑3 小时前
二叉树---二叉树的中序遍历
java·大数据·开发语言·elasticsearch·链表·搜索引擎·lua
Elastic 中国社区官方博客4 小时前
使用 Elasticsearch + Jina embeddings 进行无监督文档聚类
大数据·人工智能·elasticsearch·搜索引擎·全文检索·jina
需要点灵感4 小时前
SQL Server 存储过程语法整理
数据库·sql
沃尔威武5 小时前
性能调优实战:从火焰图定位到SQL优化的全流程
android·数据库·sql
数厘6 小时前
2.7SQL 四大分类:理解与避坑
数据库·sql
XDHCOM6 小时前
ORA-31215: DBMS_LDAP PL/SQL无效LDAP修改值,Oracle报错故障修复与远程处理方案,快速解决连接配置难题
数据库·sql·oracle