Elasticsearch - SQL 访问
它是一个组件,允许实时针对 Elasticsearch 执行类似 SQL 的查询。您可以将 Elasticsearch SQL 视为一个转换器,它既能理解 SQL 又能理解 Elasticsearch,并且能够利用 Elasticsearch 功能轻松实时、大规模地读取和处理数据。
Elasticsearch SQL 的优势
它具有本机集成 − 根据底层存储,每个查询都会针对相关节点高效执行。
无需外部部件 − 无需额外的硬件、进程、运行时或 库来查询 Elasticsearch。
轻量级且高效 −它包含并公开 SQL,以允许实时进行正确的全文搜索。
示例
PUT /schoollist/_bulk?refresh {"index":{"_id": "CBSE"}} {"name": "GleanDale", "Address": "JR. Court Lane", "start_date": "2011-06-02", "student_count": 561} {"index":{"_id": "ICSE"}} {"name": "Top-Notch", "Address": "Gachibowli Main Road", "start_date": "1989- 05-26", "student_count": 482} {"index":{"_id": "State Board"}} {"name": "Sunshine", "Address": "Main Street", "start_date": "1965-06-01", "student_count": 604}
运行上述代码后,我们得到如下所示的响应 −
{ "took" : 277, "errors" : false, "items" : [ { "index" : { "_index" : "schoollist", "_type" : "_doc", "_id" : "CBSE", "_version" : 1, "result" : "created", "forced_refresh" : true, "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1, "status" : 201 } }, { "index" : { "_index" : "schoollist", "_type" : "_doc", "_id" : "ICSE", "_version" : 1, "result" : "created", "forced_refresh" : true, "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1, "status" : 201 } }, { "index" : { "_index" : "schoollist", "_type" : "_doc", "_id" : "State Board", "_version" : 1, "result" : "created", "forced_refresh" : true, "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 2, "_primary_term" : 1, "status" : 201 } } ] }
SQL 查询
以下示例展示了我们如何构建 SQL 查询 −
POST /_sql?format=txt { "query": "SELECT * FROM schoollist WHERE start_date < '2000-01-01'" }
运行上述代码后,我们得到如下所示的响应 −
Address | name | start_date | student_count --------------------+---------------+------------------------+--------------- Gachibowli Main Road|Top-Notch |1989-05-26T00:00:00.000Z|482 Main Street |Sunshine |1965-06-01T00:00:00.000Z|604
注意 − 通过更改上面的 SQL 查询,您可以获得不同的结果集。