我的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,他帮助我指出了本教程的一些改进。