社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Elasticsearch

干货 | Elasticsearch 8.11 ES|QL 初体验

DBAplus社群 • 1 年前 • 335 次点击  

这里没有理论,只有验证后的结论和体验。


前提:这是 8.11 版本的新功能,必须提前安装最新 8.11 版本。


一、对比参考实现


1. DSL 原始语法


POST kibana_sample_data_ecommerce/_search


2. ES|QL 检索语法, 类似SQL实现


POST /_query?format=txt{  "query": """FROM kibana_sample_data_ecommerce  """}


输出如下:



1. 和 2. 等价。


3. DSL 常规检索+排序


POST kibana_sample_data_ecommerce/_search{  "size": 3,  "query": {    "range": {      "products.price": {        "gte": 50      }    }  },  "sort": [    {      "products.created_on": {        "order": "desc"      }    }  ]}


4. ES|QL 使用排序 + limit 限制输出


POST /_query?format=json{  "query": """FROM kibana_sample_data_ecommerce| WHERE products.price > 50| LIMIT 3| SORT products.created_on DESC  """}



3. 和 4. 等价。


5. DSL 使用 wildcard 模糊匹配


POST kibana_sample_data_ecommerce/_search{  "size":30,  "query": {    "wildcard": {      "products.product_name.keyword": {        "value": "Basic*"      }    }  },  "sort": [    {      "products.created_on": {        "order": "desc"      }    }  ]}


6. ES|QL使用的 like 模糊匹配


POST /_query?format=json{  "query": """FROM kibana_sample_data_ecommerce| WHERE   products.product_name LIKE "Basic*" | LIMIT 30| SORT products.created_on DESC  """}


5. 同 6. 等价。



7. DSL 聚合操作


GET kibana_sample_data_ecommerce/_search{  "size": 0,  "aggs": {    "data_histogram": {      "date_histogram": {        "field": 


    
"order_date",        "fixed_interval": "1d"      }    }  }}


8. ES|QL 聚合操作


POST /_query?format=json{  "query": """FROM kibana_sample_data_ecommerce| KEEP order_date| EVAL bucket = AUTO_BUCKET (order_date, 31, "2023-10-01T00:00:00Z", "2023-10-31T23:59:59Z")| STATS COUNT(*) BY bucket  """}



7. 和 8. 等价。


二、ES|QL REST API 使用注意


1. 限制字段输出


POST /_query?format=txt{  "query": "FROM kibana_sample_data_ecommerce | KEEP  order_date, currency,customer_first_name, customer_full_name | SORT order_date DESC | LIMIT 5"}


输出结果如下:




换做如下的语法格式也可以!


POST /_query?format=txt{  "query": """  FROM kibana_sample_data_ecommerce   | KEEP  order_date, currency,customer_first_name, customer_full_name   | SORT order_date DESC   | LIMIT 5  """}



三、ES|QL 在 Kibana 上也可以使用



四、 ES|QL 究竟为何物?



Elasticsearch 查询语言(ES|QL)是一种强大的工具,用于在 Elasticsearch 中过滤、转换和分析数据。它易于学习和使用,适用于各种用户,包括终端用户、SRE 团队、应用程序开发人员和管理员。


ES|QL 支持广泛的命令和功能,用于执行各种数据操作,如过滤、聚合和时间序列分析。ES|QL 使用“管道”(|)按顺序操作数据,使复杂数据转换和分析成为可能。


此外,ES|QL 不仅是一种语言,还代表 Elasticsearch 新计算能力的重大投资。


为了满足 ES|QL 的功能和性能要求,必须构建全新的计算架构。ES|QL 的搜索、聚合和转换功能直接在 Elasticsearch 内部执行,而不是转换为 Query DSL 执行。这种设计使 ES|QL 性能高效且多功能。


ES|QL 执行引擎针对性能优化,采用分块而非逐行操作,专注于向量化、缓存局部性、专业化和多线程处理,与现有的 Elasticsearch 聚合框架具有不同的性能特征。


其实在这之前咱们一直使用 DSL,认证专家考试也只考 DSL,在往后 Elasticsearch 推出了 类似 SQL 的 Elastic SQL,但是不能完全适配所有应用场景。其实企业里用得少。最后才有了现在的 ES | QL。


个人理解有点一语双关的意思。


  • 一方面:ESQL == Elasticsearch SQL。

  • 另一方面:ESQL = ES + QL, ES = Elasticsearch, QL 等于 SQL。

  • 再有, | 代表过滤的意思,也类似 linux 命令行。


>>>>

参考资料


  • 1、https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-language.html
  • 2、https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-rest.html


作者丨铭毅天下

来源丨公众号:铭毅天下Elasticsearch(ID:elastic999)

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/166754
 
335 次点击