如何使用基本的 Elasticsearch 命令

[ad_1]

什么是弹性搜索?

Elasticsearch 是一个分布式、全文、开源的搜索引擎。 它提供多租户功能来分析来自 Logstash 或 Kibana 等来源的聚合数据类型。 此应用程序存储和索引信息,然后可以查询特定数据。 它返回有关特定程序、日志分析、应用程序性能数据或其他信息的有用详细信息。

安装顺序

要安装 弹性堆栈,按以下顺序部署这些应用程序。

  1. 弹性搜索 (安装说明)
  2. 基巴纳 (安装)
  3. 日志存储 (安装)
  4. 节拍 (安装说明)
  5. APM 服务器 (安装说明)
  6. Elasticsearch Hadoop (安装说明)

安装

要安装 Elasticsearch,请参阅我们的知识库文章以获取更深入的说明。 下面是基本的安装步骤。

  1. 下载并解压 Elasticsearch 官方发行版。
  2. 接下来,在 Linux 或 macOS 上运行 bin/elasticsearch。 在 Windows 上运行 binelasticsearch.bat。
  3. 然后, curl -X 获取 https://localhost:9200/。
  4. 启动更多服务器

什么是索引?

索引只是将数据添加到 Elasticsearch 的过程。 Elasticsearch 将这些数据存储和检索到 Apache Lucene 索引。 我们不会在本文中专门讨论 Lucene,因为我们需要深入研究该应用程序以真正了解 Elasticsearch 所扮演的角色。 本文主要面向新用户在 Lucene 中使用基本的 GET 和 PUT 请求。

要求

当我们知道或想要指定数据类型的 ID 时,我们会发送 PUT 请求。 如果我们希望 Elasticsearch 自己为该项目生成 ID,我们可以使用 POST。 一个简单的 POST 命令示例如下所示。

curl -XPOST 'localhost:9200/logs/test_app' -H 'Content-Type: application/json' -d'
{
"timestamp": "2020-08-20 09:10:11",
"message": "Test user is logged in",
"user_id": 2,
"admin": false
}
'

输出如下所示:

{"_index":"logs","_type":"test_app","_id":"e8rHCnQBSXUbYazxinrq","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

输出

我们可以在上面提供的输出中看到 id 是由 Elasticsearch 生成的。我们还可以注意到“version”和“created”字段。 这意味着 test_app 文件是使用我们以前不存在的 POST 命令创建的。 让我们回顾一下如何使用 PUT 请求索引某些内容。

curl -X PUT 'localhost:9200/app/users/4' -H 'Content-Type: application/json' -d '
{
  "id": 2,
  "username": "Dean",
  "last_login": "2020-08-20 09:10:11"
}
'

使用这个命令,我们得到这个输出。

{"_index":"app","_type":"users","_id":"4","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

通过这个条目,我们在 /app/users/ 目录下索引了用户 Dean。

输入的所有数据都作为 JSON 对象发送。 如果我们问它在没有任何数据结构的情况下如何工作,答案是简洁的。 Elasticsearch 通常用作 NoSQL 数据库,因此不需要结构。 接下来,我们将检查如何使用 Elasticsearch 执行查询。

什么是查询?

查询只是使用精心设计的查询搜索来定位给定位置内的特定信息。 使用查询,我们可以将 elasticsearch 中的问题分为两大类。

  • 叶查询 – 叶查询在某些字段中查找特定值。 我们可以独立运行 Leaf Query,有些被称为 match、term 和 range 查询。
  • 复合查询 – 复合查询是叶查询和复合查询的组合。 复合查询将多个查询组合成一个我们使用的单一查询,以便更轻松地获取我们正在寻找的内容。

查询类型

Elasticsearch 查询的完整分类如下所示:

  • 叶查询
    • 全文
    • 词条查询
    • 地理查询
    • 跨度查询
    • 加入查询
    • 专业查询
  • 复合查询
    • 布尔值
    • 助推
    • 最大
    • 恒定得分
    • 功能评分

我们不必知道所有这些查询类型就可以使用 Elasticsearch 运行一些基本命令,因为其中许多是高级命令,需要的不仅仅是程序的基本知识。 我们在此处列出它们以更好地了解 elasticsearch 的功能。 让我们回顾一些可以与 Elasticsearch 一起使用的基本查询命令。

注意:要使用 Elasticsearch 查询某些内容,我们必须先对其进行索引!

例子

由于我们使用前面的命令索引了我们的应用程序,让我们现在尝试查询它。 一个简单的命令看起来像这样。

curl -XGET 'localhost:9200/app/users/4?pretty'

这将是输出:

{
  "_index" : "app",
  "_type" : "users",
  "_id" : "4",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "id" : 2,
    "username" : "Dean",
    "last_login" : "2020-08-20 09:10:11"
  }
}

使用这个命令,我们查询了“app”下的所有用户。 它将返回基本信息,如用户名、ID、上次登录时间等。 前面有下划线的每个字段都是我们查询的元字段。 在_source下,我们可以看到被索引的原始文档。 查询 Elasticsearch 的最简单方法是使用“URI 搜索”。 我们提供单个搜索词或词,Elasticsearch 将梳理集群中每个文档的每个字段。 例如,我们可以使用这个查询:

curl -XGET 'localhost:9200/_search?q=dean'

Elasticsearch 会找到每个包含“Dean”一词的字段。 最后,输出查询将如下所示。

{"took":60,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":1,"relation":"eq"},"max_score":0.2876821,"hits":[{"_index":"app","_type":"users","_id":"4","_score":0.2876821,"_source":
{
  "id": 2,
  "username": "Dean",
  "last_login": "2020-08-20 09:10:11"
}
}]}}

输出

正如我们所看到的,输出同时产生搜索词和搜索结果。 让我们快速分解一下这些信息。

= 查询完成的秒数

时间到 = 非常简单; false 表示查询没有超时,true 表示确实超时

碎片 = Elasticsearch 通过的文档数量,有多少搜索成功,有多少被跳过,有多少失败

命中 = 有多少字段实际满足查询条件,以及元信息

在上面的示例中,我们搜索了 Elasticsearch 中记录的所有索引信息中的特定字段。 我们可以通过提供有限的文档子集的路径来进一步缩小这个查询的范围。 这样,我们也可以减少查询时间。 所以,而不是:

curl -XGET 'localhost:9200/_search?q=dean'

我们将使用:

curl -XGET 'localhost:9200/app/users/_search?q=dean'

输出将是相同的,但在这种情况下,“took”(搜索时间范围)仅为 3 秒,而我们在之前的查询中观察到的 60 秒。 当我们知道存储某些信息的特定目录,但不确定哪个文档包含我们需要的信息时,这很方便。

现在我们已经了解了使用 Elasticsearch 进行索引和查询的基本知识,让我们继续删除索引文档。

什么是删除?

与我们之前使用的命令一样,我们可以使用 Delete 函数删除存储在我们集群中的数据。 不同之处在于,我们通过 HTTP 请求使用 DELETION。

curl -XDELETE 'localhost:9200/app/users/4?pretty'

我们的输出将如下所示:

[[email protected] ~]# curl -XDELETE 'localhost:9200/app/users/4?pretty'
{
  "_index" : "app",
  "_type" : "users",
  "_id" : "4",
  "_version" : 1,
  "result" : "not_found",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

为了删除单个索引,可以使用以下命令。

curl -XDELETE 'localhost:9200/logs?pretty'

如果我们想删除一个已经被索引的整个文档,我们可以使用这个命令。

curl -XDELETE 'localhost:9200/path/to/document'

我们在这两种情况下得到的响应将如下所示。

{
 "acknowledged" : true
}

结论

在本文中,我们介绍了一些基本的 Elasticsearch 命令,但仅涉及其所有功能的皮毛。 可以使用多个查询变体来搜索我们的信息,但我们需要多篇文章来深入涵盖所有这些。 我们希望本文提供了 Elasticsearch 的一些基础知识,因为它只是作为对这个强大而多功能的搜索引擎的介绍而编写的。

加入我们!

今天联系我们 1.800.580.4985 与知识渊博的解决方案提供商交谈,他们可以为您提供我们任何一条产品线所需的信息,以帮助您立即做出明智的决定。

忙到不想说话? 点击 这里 与我们进行快速聊天以了解更多信息。 您是否需要可以在闲暇时查看的电子邮件中的信息? 立即给我们发送电子邮件,以获得关于我们产品系列中哪种产品最适合您的需求的可靠建议。

我们期待您的回音!

[ad_2]

Related Posts