1.Elasticsearch 是什么
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。
Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
2.全文搜索引擎
主要解决结构化数据搜索和非结构化数据搜索;
它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
3.ElasticSearch与Solr比较
ES:JSON,RESFUL接口,大数据量;内置分布式管理;
SOLR:多种JSON、XML,WEBService接口;ZK管理;
4.Window安装ES
Windows 版的 Elasticsearch 的安装很简单,解压即安装完毕,解压后的 Elasticsearch 的目录结构如下
目录 |
含义 |
bin |
可执行脚本目录 |
config |
配置目录 |
jdk |
内置 JDK 目录 |
lib |
类库 |
logs |
日志目录 |
modules |
模块目录 |
plugins |
插件目录 |
解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务
注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http协议 RESTful 端口。
打开浏览器(推荐使用谷歌浏览器),输入地址:http://localhost:9200,测试结果
双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改config/jvm.options 配置文件
4.1 ES基本操作
RESTful
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和DELETE,还可能包括 HEAD 和 OPTIONS。简单的理解就是,如果想要访问互联网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径,以及对资源进行的操作(增删改查)。
Postman
Postman 是一款强大的网页调试工具,提供功能强大的 Web API 和 HTTP 请求调试。软件功能强大,界面简洁明晰、操作方便快捷,设计得很人性化。Postman 中文版能够发送任何类型的 HTTP 请求 (GET, HEAD, POST, PUT..),不仅能够表单提交,且可以附带任意类型请求体。
4.2数据格式
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解, 我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比
ES里的Index可以看成一个库,Types相当于表,Documents相当于表的行。
7之后没有Types;一个index下已经只能包含一个type;
用JSON 作为文档序列化的格式,比如一条用户信息:
5.HTTP操作
5.1索引操作
1.创建索引
index类似与关系型数据库的库;
对比关系型数据库,创建索引就等同于创建数据库;
在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/shopping
如果重复添加索引,会返回错误信息
再次插入错误
2.查看所有索引
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/_cat/indices?v
这里请求路径中的_cat 表示查看的意思,indices 表示索引,所以整体含义就是查看当前 ES
服务器中的所有索引,就好像 MySQL 中的 show tables 的感觉,服务器响应结果如下
表头 |
含义 |
health |
当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常) |
status |
索引打开、关闭状态 |
index |
索引名 |
uuid |
索引统一编号 |
pri |
主分片数量 |
rep |
副本数量 |
docs.count |
可用文档数量 |
docs.deleted |
文档删除状态(逻辑删除) |
store.size |
主分片和副分片整体占空间大小 |
pri.store.size |
主分片占空间大小 |
3.查看单个索引
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping
查看索引向 ES 服务器发送的请求路径和创建索引是一致的。但是 HTTP 方法不一致。这里可以体会一下 RESTful 的意义,
请求后,服务器响应结果如下:
4.删除索引
在 Postman 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/shopping
重新访问索引时,服务器返回响应:索引不存在
5.2文档操作
1.创建文档
索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。
文档类比关系数据库中的表;
在Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_doc 请求体内容为
此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误
上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。
如果想要自定义唯一性标识,需要在创建时指定:http://127.0.0.1:9200/shopping/_doc/1
POST随机产生一个ID值;指定唯一ID后,可以是PUT
此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT
2.查看文档
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping/_doc/1
查看成功后,服务器响应结果:
3.修改文档
和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/shopping/_doc/1
全量更新;请求体内容为:
修改成功后,服务器响应结果:
4.修改字段
修改数据时,也可以只修改某一给条数据的局部信息;每次更新的内容是不同的,所以非幂等性;所以用POST;
在 Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_update/1 请求体内容为:
{
"doc":
{ "price":3000.00}
}
修改成功后,服务器响应结果:
5.删除文档
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
在 Postman 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/shopping/_doc/1
再次查询
如果删除一个并不存在的文档
6.条件查询
1.在 Postman 中,向 ES 服务器发 GET 请求 :通过请求路径实现条件查询;http://127.0.0.1:9200/shopping/_search?q=category:小米
或者http://127.0.0.1:9200/shopping/_search
通过请求体实现条件查询
在body中输入查询条件:
{
"query":{
"match":{
"category":"小米"
}
}
}
2.批量查询:
在Body中输入查询条件:match_all