ES SQL访问

X-pack 是一个弹性堆栈扩展,它具有 SQL 特性来执行针对 elasticsearch 的 SQL 查询。它以表格形式返回查询结果。这些 SQL 查询在实时环境中执行。在 Elasticsearch 6.3 版本中,引入了 SQL 支持,使用户能够针对搜索引擎运行查询。

为了理解,您可以将 Elasticsearch SQL 视为翻译器。翻译人员可以理解 Elasticsearch 和 SQL 。通过利用 elasticsearch 功能,它可以轻松地实时读取和处理数据。 elasticsearch SQL查询的最大优点是,如果你已经熟悉SQL,你就不需要学习查询DSL。

我们都知道每个工具都有一些优点和缺点。因此,elasticsearch SQL 也有一些优点。

Elasticsearch SQL 的优点

Elasticsearch SQL 有一些优秀的特性,有助于保持头脑清醒直接,为什么你应该使用它。以下是 Elasticsearch SQL 的优势:

本地集成

Elasticsearch SQL 具有本地集成,允许针对相关节点执行每个查询。它根据底层存储高效地执行这些查询。

轻量级高效

Elasticsearch SQL 是一个轻量级且高效的数据库工具。它不抽象 elasticsearch 及其搜索功能。尽管它包含并公开 SQL 以允许实时进行适当的全文搜索。

无外部部件

这是 elasticsearch 最有用的优点SQL 因为它不需要任何额外的硬件、进程或库来查询 elasticsearch。

Elasticsearch SQL CLI

Elasticsearch 提供 elasticsearch-sql-cli.bat 文件,我们可以在其中执行 SQL 查询。它提供了在 elasticsearch 中运行 SQL 查询的访问权限。这个 bat 文件存在于 bin 文件夹中。

Elasticsearch SQL features

在本章中,我们将演示我们如何执行基本的 SQL 查询。 Elasticsearch SQL 是一个丰富的平台,提供各种有助于执行 SQL 查询的功能。以下是elasticsearch SQL的特点:

  • 有多种格式可用于响应 SQL 查询,例如 json、txt、csv、yaml 等。
  • Elasticsearch 提供了一个 elasticsearch-sql-cli 实用程序,它提供了一个 CLI,我们可以在其中直接执行 SQL 查询。
  • 它还允许用户使用 elasticsearch SQL 实现额外的查询 DSL 过滤。

Elasticsearch SQL 入门

让我们以一些数据创建索引为例,开始使用 Elasticsearch SQL。在此示例中,我们将创建一个名为 college 的索引,该索引将包含课程列表。

PUT http://localhost:9200/college/
_bulk?refresh/
{
   "index": {"_id": "Btech"}
}
{
   "course": "Btech",
   "branch": "CS", 
   "duration": "4 year", 
   "fee": "142000"
}
{
   "index": {"_id": "MBA"}
}
{
   "course": "MBA", 
   "branch": "Marketing",
   "duration": "2 year",
   "fee": "148000"
}
{
   "index": {"_id": "Fashion Designing"}
}
{
   "course": "Fashion Designing", 
   "branch": "Clothing and textile",
   "duration": "2 year", 
   "fee": "210000"
}

Response

通过在elasticsearch-head插件中执行上面的查询,我们将得到与下面给出的相同的响应:

{
   "took": 247,
   "error": false, 
   "items": [
        {
"index": { 
     "_index": "college",
     "_type": "_docs",
     "_id": "Btech",
     "_version": 1,
     "result": "created",
     "forced_refresh": true,
     "_shards": {
  "total": 2,
  "successful": 1,
    "failed": 0
       },
      "_seq_no": 0,
     "_primary_term": 1,
     "status": 167,
}
         },
        {
"index": { 
     "_index": "college",
     "_type": "_docs",
     "_id": "MBA",
     "_version": 1,
     "result": "created",
     "forced_refresh": true,
     "_shards": {
  "total": 2,
  "successful": 1,
    "failed": 0
       },
      "_seq_no": 0,
     "_primary_term": 1,
     "status": 167,
}
         },
        {
"index": { 
     "_index": "college",
     "_type": "_docs",
     "_id": "Fashion Designing",
     "_version": 1,
     "result": "created",
     "forced_refresh": true,
     "_shards": {
  "total": 2,
  "successful": 1,
    "failed": 0
       },
      "_seq_no": 0,
     "_primary_term": 1,
     "status": 167,
}
         }
     ]
}

 

运行 SQL 查询

Elasticsearch SQL 查询以表格形式显示返回的数据。这些 SQL 查询可以使用 SQL REST API 执行。在下面的示例中,我们将创建一个 SQL 查询来从索引中获取数据,您将在其中看到它是如何执行并响应用户的。

POST _sql?format=txt
{
   "query": "SELECT * FROM college WHERE fee > '145000'"
}

Response

以上查询用于获取college索引中包含fee is more的记录148000。您将得到与以下输出相同的响应:

Elasticsearch SQL Access

Elasticsearch SQL CMD

Elasticsearch 包提供了一个 elasticsearch-sql-cli 命令提示符来执行 Elasticsearch SQL 查询。 elasticsearch-sql-cli 是一个批处理文件,存在于 bin 文件夹中。通过运行这个 bat 文件,一个 SQL 命令提示符将显示你可以在哪里执行 elasticsearch SQL 查询。它看起来像下面的截图:

Screenshot

Elasticsearch SQL Access

在这里您可以访问在 elasticsearch 中执行 SQL 查询。因此,您无需学习查询 DSL。

有时需要在索引之前转换文档。因此,您需要使用摄取节点在实际索引发生之前对文档进行预处理。 例如,如果我们想重命名一个字段并为其建立索引或从文档中删除一个字段,所有这些操作都由 Ingest 节点处理。在集群中,所有节点都具有 ...