Elasticsearch (elastic灵活的 search搜索)
ES基本信息介绍
- 快速地储存、搜索和分析海量数据,常被用来做全文搜索引擎
- Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用
- 因为Lucene比较吃内存,所以Elasticsearch也比较吃内存,ES开机最少锁定1G内存。
- ES没有事务,吞吐量大,适合处理海量的、更新频率很低的数据
ES的应用场景
1)存储/读取业务数据,在搜索推荐系统中使用ES作为存储和检索服务器;
2)存储/读取日志数据,在日志分析系统中使用ES为企业提供实时日志分析;
ES与MySQL的区别
MySQL | ElasticSearch |
---|---|
数据库database | 索引Index |
表Table | 类型Type |
数据行Row | 文档Document |
数据列Column | 字段Field |
模式Schema | 映射Mapping |
SELECT语句 | HTTP GET 请求 |
UPDATE语句 | HTTP PUT 请求 |
ADD语句 | HTTP POST请求或PUT请求 |
测试ES提供的Restful 接口
- 向ES插入一条JSON—post方式插入,不指定id主键,执行POST请求localhost:9200/db913/student/,请求数据为
{
"age":23,
"name":"tttlisi",
"grade":"web03test"
}
查询刚刚插入的数据,执行GET请求
修改已经插入ES的数据,执行PUT请求
再次查询是否修改成功,执行GET请求
删除ES里存的数据,注意不是DELETE请求,而是POST请求,另外要设置查询参数_delete_by_query,并且可以在请求体中设置按什么条件匹配ES文档数据
再次按主键查询ES,发现数据已经不存在了
ES节点Node 、集群Cluster、索引Index、类型Type等概念解析
- Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例,
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster);
- Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引,
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写;
- Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index,Document 使用 JSON 格式;
- Document 可以按Type分组,如天气数据 可以按城市分组,也可以按气候分组。
SpringBoot集成ES的方法
SpringBoot是目前最流行的WEB快速开发平台,在SpringBoot项目中集成Elasticsearch目前有2种方法;
- 让SpringBoot项目集成ElasticSearch的Client客户端,使项目可以对ES服务器数据进行CRUD;
常见的ES客户端有Jest、Spring Data Elasticsearch;
其中Jest是一个用于Elasticsearch的HTTP Java客户端,连接的是ES服务器的9200端口;
而Spring Data Elasticsearch连接的是ES的9300端口(TCP连接,把自己伪装成ES的一个节点);
-
在SpringBoot项目通过手动调用ES Rest API来操作ES服务器;
即通过ES服务器的9200端口手动发送Restful风格的API请求,
具体请求格式可参考大神阮一峰的博客http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html