参考
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.000Z
James S.A. Corey|Leviathan Wakes|561 |2011-06-02T00:00:00.000Z
Dan 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
}