推广 热搜:   公司  快速  企业  中国  设备    上海  行业  未来 

ElasticSearch快速入门(一)

   日期:2024-10-31     移动:http://keant.xrbh.cn/quote/7091.html

Elaticsearch,简称为 ES, 是一个开源的高扩展的分布式全文搜索引擎 (这里说到的全文搜索引擎指的是目前广泛应用的主流搜索引擎)。与传统型关系数据库不同,Elaticsearch使用的是倒排索引,它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

ElasticSearch快速入门(一)

例如百度、谷歌之类的搜索引擎,它们都是根据网页中的关键字生成索引的,当我们在这类搜索引擎输入关键字进行搜索时,它们会根据关键字去匹配索引,然后将索引对应的所有网页返回;除了这类搜索引擎之外,还一些非结构化的数据文本等,对于这些内容的搜索,关系型数据库搜索不是能很好的支持。而且一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段(除了wordpress,之前折腾wordpress时,把数据库删了,文章直接就没了,后面发现wordpress竟然把文章存在数据库里 ==+ )。当进行全文检索时,需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。即使建立了索引,后期维护起来也比较麻烦,进行插入和更新操作时都会重新构建索引。 全文搜索引擎的适用场景:

下载安装

,下载完后直接解压;

进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务

打开地址:,测试是否启动成功

RESTful

在SpringMVC中有提到过。

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就 是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之 间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务 器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用 服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。 在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它 向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客 户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETe。

在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目 标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、 PUT、DELETE,还可能包括 HEAD 和 OPTIONS。简单的理解就是,如果想要访问互联 网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径,以 及对资源进行的操作(增删改查)。

第三方工具

使用Elasticsearch服务器发请求时必须包含HTTP 标准的方法,而大部分浏览器默认发送的只有 GET 和 POST 请求。所以为了能方便地进行客户端的访问,

我们可以使用 网页调试工具配合使用。

Postman下载安装后,按照提示填写信息,然后随便创建一个team就可以了;

使用Elasticsearch服务器发请求时必须包含HTTP 标准的方法,而大部分浏览器默认发送的只有 GET 和 POST 请求。所以为了能方便地进行客户端的访问,

我们可以使用以下几种工具可配合使用。

数据格式

Elasticsearch 是面向文档型数据库,一条数据对应的就是一个文档。

与MySQL的类比:

ES 里的 Index 可以看做一个库,而 Types 相当于表,documents 则相当于表的行。 这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个 type,Elasticsearch 7.X 中, Type 的概念已经被删除了

用 JSON 作为文档序列化的格式,比如一条用户信息:

Postman

索引操作

为了方便演示RESTful风格,这里使用的是Postman进行操作,如果不用RESTful风格,可直接跳到Kibana

打开Postman,按照提示进行初始化设置;

进入Postman界面后,新建一个Collection;

创建索引

相当于关系型数据库中的创建数据库

点击右侧加号;输入一个PUT命令:

然后点击Send,可以看到创建成功的提示 返回结果:

重复添加时会报错: 返回结果:

查询索引

输入一个GET命令,来查询所有索引;(cat 表示查看的意思,indices 表示索引,相当于像 MySQL 中的 show tables)

返回结果:

查询单个索引

返回结果:

删除索引

返回结果:

文档操作
创建文档

这里的文档就相当于MySQL中的表中的数据

发送一个POST请求,创建文档,文档的格式为JSON:

选择POST请求(由于此处没有指定ID为非幂等性操作,所以只能用POST):

简单理解幂等性:多次操作与一次操作的结果相同,即为幂等性操作;反之 此例中由于没有指定ID,所以ID为随机生成,导致多次操作与一次操作的结果不同

输入请求体:点击Body,点击raw,格式选择JSON,并在输入框输入请求体(请求完成后记得把请求体删除,否则遇到不需要请求体的命令时会报错)

然后点击Send发送请求;

返回结果(附解释):

上面的数据创建后,由于没有指定数据唯一性标识(ID)(也就是主键),默认情况下,ES 服务器会随机生成一个。 如果想要自定义唯一性标识,需要在创建时指定(此时就变成了幂等性操作,因此可以使用POST和PUT两种请求方式):

请求体:(请求完成后记得把请求体删除,否则遇到不需要请求体的命令时会报错)

返回结果:

查看文档

返回结果:

修改文档

请求体:(请求完成后记得把请求体删除,否则遇到不需要请求体的命令时会报错)

点击Send发送请求:

返回结果:

请求体:

返回结果:

删除文档

返回结果:

请求体:

返回结果:

同理如果要删除索引下全部数据,只需要改请求体条件即可:

Kibana

打开Kibana的bin路径下的kibana.bat启动Kibana;

然后浏览器访问5601端口,点击Explore on my own;

在左侧菜单找到Dev Tools;

索引操作
创建索引

相当于关系型数据库中的创建数据库

输入一个PUT命令:

错误写法(不能有空行):

点击代码右侧的启动按钮,可以在右侧看到创建成功的提示 返回结果:

重复添加时会报错: 返回结果:

查询索引

输入一个GET命令,来查询所有索引;(cat 表示查看的意思,indices 表示索引,相当于像 MySQL 中的 show tables)

返回结果:

可以看到ElasticSearch请求方式用小写也能执行,但是左侧会报错误提醒

查询单个索引

返回结果:

删除索引

返回结果:

文档操作
创建文档

这里的文档就相当于MySQL中的表中的数据

发送一个POST请求,创建文档,文档的格式为JSON:

选择POST请求(由于此处没有指定ID为非幂等性操作,所以只能用POST):

简单理解幂等性:多次操作与一次操作的结果相同,即为幂等性操作;反之 此例中由于没有指定ID,所以ID为随机生成,导致多次操作与一次操作的结果不同

点击右侧运行按钮运行

返回结果(附解释):

上面的数据创建后,由于没有指定数据唯一性标识(ID)(也就是主键),默认情况下,ES 服务器会随机生成一个。 如果想要自定义唯一性标识,需要在创建时指定(此时就变成了幂等性操作,因此可以使用POST和PUT两种请求方式)

返回结果:

查看文档

返回结果:

修改文档

请求体:(请求完成后记得把请求体删除,否则遇到不需要请求体的命令时会报错)

返回结果:

请求体:

返回结果

删除文档

返回结果:

返回结果:

同理如果要删除索引下全部数据,只需要改请求体条件即可:

对比

一图简单对比Postman和Kibana使用ES命令方式区别:

由于后面示例都是用的Kibana,继续用Postman的可自行参照此图,根据示例中的Kibana进行类比

映射关系

索引库(index)中的映射类似于数据库(database)中的表结构(table)。 创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型 下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。

映射数据说明:

创建映射关系

首先创建索引

然后创建映射关系

返回结果:

返回结果:

查看映射关系

返回结果:

高级查询

为了方便演示,这里不使用系统自动给的映射,而是自行创建映射

创建完映射后,创建数据

全量查询(match_all)
匹配查询(match)

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系 1)直接通过请求路径查询(不推荐,中文容易出现乱码)

返回结果:

查询条件被自动分词,所有content字段中包含“OS、Android、Not、on”的文档均会被检索出来

2)通过请求体查询

返回结果和上面一样 为了更直观的显示我们可以使用进行查询:

可以很直观的看到查询条件被分成了四个字段“OS、Android、Not、on”

测试text类型映射:

返回结果:

查询字段中的华和果自动被分词了,因此所有name中包含华和果的文档全被检索出来了

同样可以看到关键词被分成了华和果两个字段

测试keyword类型映射:

返回结果(未查到符合要求文档):

可以看到由于vendor字段被设置了keyword映射,所以查询关键词并没有被分词;所以必须输入该字段的完整值进行查询

返回结果:

测试index为false(不能被检索):

返回结果:(提示错误信息)

字段匹配查询(multi_match)

multi_match 与match 的区别就是它可以在多个字段中进行查询

查询在name和content字段中包含华和MIUI的文档

返回结果:

关键字精确查询(term)

term 查询,精确的关键词匹配查询,不对查询条件进行分词。

返回结果:(未查询到)

由于text类型默认会被自动分词,所以存入name字段的值:“小米手机”会被自动分成“小、米、手、机”四个字,因此当我们进行精确匹配查询“小米手机”时就会查询不到;只有当查询“小、米、手、机”四个字的任意字时才会匹配到;如果name字段被设为keyword映射,则只有当查询的关键词为“小米手机”时才会进行匹配

多关键字精确查询(terms)

terms查询和term查询的区别是它可以指定多值进行匹配查询,并且只需要匹配一个值即为满足查询条件;类似于mysql 的in 。

返回结果:

指定查询字段(_source)

默认情况下,ElasticSearch会将保存在_source中的所有字段都返回。因此我们可以自定义返回的字段

设置_source只返回name和area字段

返回结果:

过滤字段(includes/excludes)

includes:来指定想要显示的字段

excludes:来指定不想要显示的字段 返回结果:

可以看到满足must条件的华为和小米均被查了出来,而符合should要求的华为优先级较高,被排在了前面

范围查询(range)

range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符

返回结果:

模糊查询(wildcard)

模糊查询效率较慢,因此不推荐使用;和大部分模糊匹配一样,使用*或者?进行占位替代; ​

返回结果:

因为是模糊查询,所以不受keyword映射影响,但是仍然会受到分词器的影响,比如下面实例中的模糊查询name为“小米”的文档,而上面示例已经说了,“小米手机”已经被分词成了四个独立的字,因此通过“小米”去模糊查询,仍然是查询不到的

单字段排序(sort)

sort 可以按照不同的字段进行排序,并且通过order 指定排序的方式(desc 降序,asc升序)。

返回结果:

多字段排序(sort)

为方便测试,添加一个只有ID不同的数据:

开始测试:

先按价格降序,然后按_id升序

返回结果:

测试完成后,删除刚刚添加的数据 ​

高亮查询(highlight)

Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。 在使用match 查询的同时,加上一个highlight 属性(可以不设置,不设置则为默认值):

pre_tags:前置标签 (默认为em标签)

post_tags:后置标签 (默认为em标签)

fields:需要高亮的字段

title:这里声明title 字段需要高亮,后面可以为这个字段设置特有配置

返回结果:

因为是html语法,所以返回结果里面只有文字,而不是直接显示效果

分页查询(from)

from:当前页的起始索引,默认从0 开始。 from = (页数 - 1) * size 【即from为0时,为第一页,以此类推】 size:每页显示多少条

返回结果:

聚合查询(aggs)

聚合允许使用者对es文档进行统计分析,类似与MySQL中的group by

度量聚合

例如取最大值(max)、最小值(min)、平均值(avg)、总数(count)、 去重后求总数(cardinality)、返回所有度量类型的统计(stats)等等。

返回结果:

在查询结果底部的aggregations字段中可以看到得到的相加结果为33172.0

桶聚合查询

在已有的分组条件下再进行聚合即为桶聚合,相当于MySQL中的group by 语句;桶聚合返回很多子集,并限定输入数据到一个特殊的叫做桶的子集中。可以把桶聚合想象成 类似切面功能的东西。

terms聚合为字段中每个词条返回一个桶。允许你生成字段每个值的统计;

范围聚合和时间范围聚合

多个聚合的嵌套即为桶嵌套

中文支持

在Kiabana的配置文件中修改,然后重启Kiabana即可:

可视化操作

直接对索引操作:

文档的可视化操作

本文地址:http://lianchengexpo.xrbh.cn/quote/7091.html    迅博思语资讯 http://lianchengexpo.xrbh.cn/ , 查看更多

特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


相关行业动态
推荐行业动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号