参考
SQL REST API
- 概述
- 响应数据格式
- 对大型响应进行分页
- 使用Elasticsearch 查询 DSL 进行过滤
- 列式结果
- 将参数传递给查询
- 使用运行时字段
- 运行异步 SQL 搜索
概述
SQL 搜索 API 接受 JSON 文档中的 SQL,执行它,然后返回结果。例如:
返回POST /_sql?format=txt{"query": "SELECT * FROM library ORDER BY page_count DESC LIMIT 5"}
author | name | page_count | release_date----------------+---------------+---------------+------------------------Frank Herbert |Dune |604 |1965-06-01T00:00:00.000ZJames S.A. Corey|Leviathan Wakes|561 |2011-06-02T00:00:00.000ZDan Simmons |Hyperion |482 |1989-05-26T00:00:00.000Z
使用Kibana控制台
如果您使用的是 Kibana 控制台(强烈建议您使用),请在创建查询时利用三重引号。这不仅会自动转义查询字符串中的双引号 (),而且还支持多行,如下所示:””””POST /_sql?format=txt{"query": """SELECT * FROM library ORDER BY page_count DESC LIMIT 5"""}
响应数据格式
虽然文本格式对人类来说很好,但计算机更喜欢更有条理的东西。
Elasticsearch SQL 可以按以下格式返回数据,这些格式可以通过 URL 中的属性或通过设置 HTTP 标头进行设置:formatAccept
| 格式 | 接受HTTP 标头 | 描述: __ |
|---|---|---|
| 人类可读 | ||
| csv | text/csv | 逗号分隔值 |
| json | application/json | JSON(JavaScript 对象表示法)人类可读格式 |
| tsv | text/tab-separated-values | 制表符分隔的值 |
| txt | text/plain | 类似命令行的表示形式 |
| yaml | application/yaml | YAML(非标记语言)人类可读格式 |
| 二进制格式 | ||
| cbor | application/cbor | 简洁的二进制对象表示 |
| smile | application/smile | 类似于 CBOR 的微笑)二进制数据格式 |
json格式
POST /_sql?format=json{"query": "SELECT * FROM library ORDER BY page_count DESC","fetch_size": 5}
返回
{"columns": [{"name": "author","type": "text"},{"name": "name","type": "text"},{"name": "page_count","type": "long"},{"name": "release_date","type": "datetime"}],"rows": [["Frank Herbert","Dune",604,"1965-06-01T00:00:00.000Z"],["James S.A. Corey","Leviathan Wakes",561,"2011-06-02T00:00:00.000Z"],["Dan Simmons","Hyperion",482,"1989-05-26T00:00:00.000Z"]]}
yaml格式
POST /_sql?format=yaml{"query": "SELECT * FROM library ORDER BY page_count DESC","fetch_size": 5}
返回
---columns:- name: "author"type: "text"- name: "name"type: "text"- name: "page_count"type: "long"- name: "release_date"type: "datetime"rows:- - "Frank Herbert"- "Dune"- 604- "1965-06-01T00:00:00.000Z"- - "James S.A. Corey"- "Leviathan Wakes"- 561- "2011-06-02T00:00:00.000Z"- - "Dan Simmons"- "Hyperion"- 482- "1989-05-26T00:00:00.000Z"
对大型响应进行分页
使用以下示例,可以通过返的Cursor字段来继续下一页。对于 CSV、TSV 和 TXT 格式,Cursor将在 HTTP 标头中返回。
POST /_sql?format=json{"query": "SELECT * FROM library ORDER BY page_count DESC","fetch_size": 2}
分页查询返回
{"columns": [{"name": "author","type": "text"},{"name": "name","type": "text"},{"name": "page_count","type": "long"},{"name": "release_date","type": "datetime"}],"rows": [["Frank Herbert","Dune",604,"1965-06-01T00:00:00.000Z"],["James S.A. Corey","Leviathan Wakes",561,"2011-06-02T00:00:00.000Z"]],"cursor": "h97qA0RGTACEkd9OwjAUxnvqQgwx8RF8BScQ44UXVVfIokQHDNlNU7oOFrsWtoLg0/gQvp9uAyJe+V003/nT05xfIUIwRxhQpe9S57VDZQqaSSpVzAqT2+aCzyQTZqUtarAkzQsLgMBRRs92/fAFJwjj0lRHPcHdm13dafCVnZscYUfzTCJ8PBOf5VJJXkgWcyvhorB5KmwdMLOwqdFcMZtmkmmuTYHhE+Y310vy7vWmXZWKjG5lED1Mw+hR0HgoFO3FY+vK15iK7tvmyQtb5G7SkdR/ngwnnT7116NW6IWe3w66NIpHbkAO8pcRTS/bLyPaCrQah7TfGdy7a+7ZbT/bfAyuBCH/vUXILWrugTqQ7FcHx8qNLVkkNYLf8AjFgSkkf5GcViwqAuX18o9+AAAA//8DAA=="}
继续查询下页
POST /_sql?format=json{"cursor": "h97qA0RGTACEkd9OwjAUxnvqQgwx8RF8BScQ44UXVVfIokQHDNlNU7oOFrsWtoLg0/gQvp9uAyJe+V003/nT05xfIUIwRxhQpe9S57VDZQqaSSpVzAqT2+aCzyQTZqUtarAkzQsLgMBRRs92/fAFJwjj0lRHPcHdm13dafCVnZscYUfzTCJ8PBOf5VJJXkgWcyvhorB5KmwdMLOwqdFcMZtmkmmuTYHhE+Y310vy7vWmXZWKjG5lED1Mw+hR0HgoFO3FY+vK15iK7tvmyQtb5G7SkdR/ngwnnT7116NW6IWe3w66NIpHbkAO8pcRTS/bLyPaCrQah7TfGdy7a+7ZbT/bfAyuBCH/vUXILWrugTqQ7FcHx8qNLVkkNYLf8AjFgSkkf5GcViwqAuX18o9+AAAA//8DAA=="}
返回下一页面的数据
{"error": {"root_cause": [{"type": "search_context_missing_exception","reason": "No search context found for id [39577]"}],"type": "search_phase_execution_exception","reason": "all shards failed","phase": "query","grouped": true,"failed_shards": [{"shard": 0,"index": "library","node": "9xROa694RoSuDTBxDaYuMQ","reason": {"type": "search_context_missing_exception","reason": "No search context found for id [39577]"}}]},"status": 404}
