我的 Elasticsearch 系列文章,逐渐更新中,欢迎关注
0A. 关于 Elasticsearch 及实例应用
00.Solr 与 ElasticSearch 对比
01.ElasticSearch 能做什么?
02.Elastic Stack 功能介绍
03. 如何安装与设置 Elasticsearch API
04. 如果通过 elasticsearch 的 head 插件建立索引_CRUD 操作
05.Elasticsearch 多个实例和 head plugin 使用介绍
06. 当 Elasticsearch 进行文档索引时,它是如何工作的?
07.Elasticsearch 中的映射方式—简洁版教程
08.Elasticsearch 中的分析和分析器应用方式
09.Elasticsearch 中构建自定义分析器
10.Kibana 科普 - 作为 Elasticsearhc 开发工具
11.Elasticsearch 查询方法
12.Elasticsearch 全文查询
13.Elasticsearch 查询 - 术语级查询
14.Python 中的 Elasticsearch 入门
15. 使用 Django 进行 ElasticSearch 的简单方法
16. 关于 Elasticsearch 的 6 件不太明显的事情
17. 使用 Python 的初学者 Elasticsearch 教程
18. 用 ElasticSearch 索引 MongoDB, 一个简单的自动完成索引项目
19.Kibana 对 Elasticsearch 的实用介绍
另外 Elasticsearch 入门,我强烈推荐 ElasticSearch 新手搭建手册给你,非常想尽的入门指南手册。
什么是 Elasticsearch
Elasticsearch 是一个高度可扩展的开源搜索引擎。它使您可以实时地保留和分析大量信息。
Elasticsearch 使用 JSON 文档文件。使用内部结构,它可以几乎实时地解析您的数据以搜索所需的信息。
在处理大数据时非常有用。
定义和其他东西
有关 Elasticsearch 的一些技术(但有用)信息是:
● 它是一个实时的分布式分析引擎。
● 它是开源的,用 Java 开发。
● 它使用基于文档的结构而不是表和架构。
我发现的最大好处是速度和可伸缩性。它以允许查询真正快速的方式实现。关于可伸缩性,它可以在您的笔记本电脑或数以 PB 计的数据的数百台服务器中运行。
除了速度和可伸缩性之外,它还具有与故障相关的高弹性,并且在数据类型方面具有很高的灵活性。
同样,Elasticsearch 对大数据非常有用,可以轻松地在几乎实时的搜索中分析数百万个数据。这就是 Elasticsearch 的魔力。
但是,您如何搜索所有这些数据?为此,您使用查询。
查询:执行和组合多种类型的搜索(例如结构化,非结构化,地理,度量等)的语言。您可以“无论如何都要”进行查询。
关于分析,Elasticsearch 使您可以轻松了解数十亿条日志行。它提供了汇总,可帮助您缩小范围以探索数据中的趋势和模式。
例如,如果您有一个具有 500 个节点的云,则可以在短时间内分析整个基础架构,将日志导入 Elasticsearch,然后根据其响应,找出导致基础架构出现问题的根本原因。
其他使用示例:
● 显示具有特定值的数据。例如:从数据库中显示所有 23 岁的用户。
● 选择具有特定值的数据按地理位置搜索数据
● 地理搜索按天汇总数据
客户群
Elasticsearch 非常有趣,以至 Mozilla,GitHub,Stack Exchange,Netflix 和更多用户使用它。
动手
既然您已经对 Elasticsearch 有所了解,那么我们来看这个故事的实际部分。
安装
- 要执行 Elasticsearch,您必须:
- 安装 Java:版本应为 8 或更高。
安装 Elasticsearch:并按照以下步骤在您的操作系统中进行安装。如果您安装了装有 Homebrew 的 MacOS,则只需输入以下内容即可安装
brew install elasticsearch
接口
要使用 Elasticsearch,您将需要一个接口。在这个故事中,我将使用 Kibana(一个很棒的 Web 界面)来可视化和操纵 Elasticsearch 的数据。
可以在 elastic.co 中下载并按照此处介绍的步骤进行安装,或者通过以下命令使用 Homebrew:
brew install kibana
您需要为 Elasticsearch 和 Kibana 下载相同的版本。
将来,当您发现自己需要开发与 Elasticsearch 进行交互的软件时,可以使用编程语言与之交互。一些可接受的编程语言是:
● Java
● C#
● Python
● JavaScript
● PHP
● Perl
● Ruby
基本概念
好!现在您已经安装了 Elasticsearch 和 Kibana。在开始使用它之前,让我们看一些有关 Elasticsearch 的有用概念。
Elasticsearch 是由
簇
群集是一个或多个节点的集合,这些节点一起保存整个数据。它在所有节点上提供联合索引和搜索功能,并由唯一名称标识(默认情况下为 ’/ elasticsearch’/)
节点
节点是作为群集一部分的单个服务器,它存储数据并参与群集的索引和搜索功能。
指数
索引是具有相似特征的文档的集合,并由名称标识。此名称用于在对索引中的文档执行索引,搜索,更新和删除操作时引用索引。在单个群集中,您可以定义任意多个索引。
文件
文件是可以编制索引的基本信息单位。它以 JSON 表示,JSON 是一种普遍存在的 Internet 数据交换格式。
碎片
Elasticsearch 提供了将索引细分为多个碎片的功能。每个分片本身就是一个功能齐全且独立的“索引”,可以托管在群集内的任何节点上。当放置在单个节点中的索引占用的磁盘空间超过可用磁盘空间时,这很有用。然后,将索引细分为不同的节点。此外,分片允许您在各个分片之间分配和并行化操作,从而提高性能。
复制品
Elasticsearch 允许您为索引的分片制作一个或多个副本,这些副本称为副本分片或副本。如果节点发生故障,它可以提供高可用性,并且由于可以在所有副本上并行执行搜索,因此可以扩展搜索量。
执行中
好吧,现在,让我们真正地动手吧。转到安装 Elasticsearch 的目录,然后通过终端执行该命令
$ ./elasticsearch
如果您是使用 Homebrew 安装的,请尝试输入
elasticsearch
终端。它可以启动 Elasticsearch,而无需转到其目录。
Elasticsearch 开始现在,正在执行 Elasticsearch,打开另一个终端窗口并执行 Kibana,转到其目录并执行,
$ ./kibana
或者使用 Homebrew,只需输入
$ kibana
Kibana 开始了如果一切顺利,那么您将同时被执行。要进行验证,请打开网络浏览器,然后转到:
http://localhost:9200
http://localhost:9200
结果表明 Elasticsearch 正在运行如果您看到与上述相似的结果,则表明 Elasticsearch 已启动并正在运行。
要查看 Kibana 界面,请转到:
http://localhost:5601
位于 http:// localhost:5601 的 Kibana 界面
如果一切都如上所示,现在让 ” 播放一些数据。
指令
在 Kibana 界面中,选择左侧菜单上的开发工具。您将看到一个左侧的控制台来键入命令,而右侧的控制台来查看结果。
让我们看看可用于操作数据的命令。
PUT 命令允许您将新文档数据插入 Elasticsearch。在控制台中键入以下代码,按绿色的播放按钮,然后查看结果。
PUT /my_playlist/song/6
{
"title" : "1000 years",
"artist" : "Christina Perri",
"album" : "Breaking Dawn",
"year" : 2011
}
这意味着您只是将文档数据插入到 Elasticsearch 中。在此示例中,我们有
/my_playlist/song/6
其中:
● my_playlist:是要插入数据的索引的名称。
● song:是要创建的文档的名称。
● 6:元素实例的 ID。在这种情况下,是歌曲 ID。
如果索引 my_playlist 尚不存在,则会创建该索引,就像文档歌曲和 id 6 一样。
要更新值,请对同一文档使用相同的 PUT 命令。例如,如果要插入新的参数,位置,则可以通过以下方式进行:
PUT /my_playlist/song/6
{
"title" : "1000 years",
"artist" : "Christina Perri",
"album" : "Breaking Dawn",
"year" : 2011,
"location" : "London"
}
结果应为
得到
GET 命令允许您检索有关数据的信息。键入以下示例:
GET / my_playlist / song / 6
这将检索您刚刚插入的数据。
删除
要删除文档,您只需要使用以下命令:
删除 / my_playlist / song / 6
搜索数据
好的,知道您知道一些命令。但是,它以非常简单的方式呈现。对此进行更深入的了解,可以执行更复杂的查询。
有不同的 Search API。为简单起见,我将仅提供一些简单的示
要将数据集加载到 Elasticsearch 中,请打开终端,转到下载文件的目录,然后执行以下命令:
curl -H ‘Content-Type: application/x-ndjson’ -XPOST ‘localhost:9200/bank/account/_bulk?pretty’ –data-binary @accounts.json
现在,您应该将帐户数据放入 Elasticsearch。您可以尝试以下示例:
URI 搜索的简单示例
从状态 UT 返回所有帐户。
GET /bank/_search?q=state:UT
从 UT 或 CA 返回所有帐户。
GET /bank/_search?q=state:UT OR CA
从状态 TN 和女性客户返回所有帐户。
GET /bank/_search?q=state:TN AND gender:F
退还 20 岁以上人士的所有帐户。
GET /bank/_search?q=age:>20
退还 20 至 25 岁之间的所有帐户。
GET /bank/_search?q=age:(>=20 AND <=25)
使用查询 DSL 的简单示例
URI 可能不是查询 Elasticsearch 的最佳方法。似乎最好使用 QueryDSL。
将查询 DSL 视为查询的 AST(抽象语法树),它由两种子句组成:
● 叶子查询子句:它在特定字段中查找特定值,例如 match,term 或 range 查询。
● 复合查询子句:它包装其他叶查询或复合查询,并用于以逻辑方式组合多个查询(例如 bool 或 dis_max 查询),或更改其行为(例如 constant_score 查询)。
查询子句的行为不同,取决于它们是在查询上下文中还是在过滤器上下文中使用:
● 查询上下文:查询上下文中使用的查询子句回答以下问题:“此文档与该查询子句的匹配程度如何?”。答案是_score,代表文档相对于其他文档的匹配程度。
● 过滤器上下文:过滤器上下文中的查询子句回答问题“此文档是否与此查询子句匹配?”。答案是简单的是或否。
以下是在搜索 API 的查询和过滤器上下文中使用的查询子句的示例。此查询将匹配满足以下所有条件的文档:
● 该地址字段包含字街
● 在性别字段包含确切的词˚F
● 该年龄字段包含数大于或等于 25
GET / _search
{“query”:{// 1“bool”:{// 2“must”:[{“match”:{“address”:“Street”}}} // 3
],“filter”:[ // 4
{“term”:{“gender”:“f”}},// 5
{“range”:{“age”:{“gte”:25}}} // 6
]
}
}
}
子句用于查询上下文,这意味着它们用于对每个文档的匹配程度进行评分。
// 4:该
filter
参数表示过滤器上下文。
// 5 和 // 6:
term
和
range
子句在过滤器上下文中使用。它们将过滤出不匹配的文档,但不会影响匹配文档的分数。
提示:在查询上下文中使用查询子句以应对可能影响匹配文档得分(即文档匹配程度)的条件,并在过滤器上下文中使用所有其他查询子句。
现在,您对什么是 Elasticsearch 以及如何在其上插入,更新,删除和搜索数据有所了解。Kibana 具有更多查看数据的功能,包括将其显示为不同的图形。我建议您探索所有这些。
关于 Elasticsearch 的更多信息。根据我在与 Elasticsearch 的第一次接触中对这些主题的了解,在此介绍的内容只是开始了解它的第一步。阅读此故事后,您应该探索 Kibana 界面,Elasticsearch 文档,如何创建更复杂的查询等等。
我希望这个故事对您初次接触 Elasticsearch 有帮助,现在您可以轻松阅读其他教程和文档。
感谢您的阅读并祝您学习顺利:)
编辑:
我在这里感谢 Elasticsearch 社区论坛的 David Pilato,他帮助我指出了本教程的一些改进。