ElasticSearch
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。
Elasticsearch结合Kibana、Logstash、Beats,也就是elastic
stack(ELK)。被广泛应用在日志分析、实时监控(CPU、Memory、Program)等领域。
elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。
Kibana 负责数据可视化
Elasticsearch 负责存储、计算、搜索数据
Logstash、Beats负责数据抓取
elasticsearch的底层实现基于lucene,lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发
官网:https://lucene.apache.org
Lucene
优点:易扩展、高性能(基于倒排索引数据结构)
缺点:限于Java语言、学习曲线陡峭、不支持水平扩展
elasticsearch
2004年Shay Banon基于Lucene开发了Compass
2010年Shay Banon重写了Compass,取名Elasticsearch
相比lucene其具备支持分布式、可水平扩展、提供Restful接口、可被任意语言调用的优势
ES官网地址:https://www.elastic.co/cn/
正向索引与倒排索引
elasticsearch采用倒排索引:
- 文档(document):每条数据就是一个文档
- 词条(term):文档按照语义划分的词语
正向索引
id | title | price |
---|---|---|
1 | 小米手机 | 3499 |
2 | 华为手机 | 4999 |
3 | 华为小米充电器 | 49 |
4 | 小米手环 | 299 |
倒排索引
词条(term) | 文档id |
---|---|
小米 | 1, 3, 4 |
手机 | 1,2 |
华为 | 2,3 |
充电器 | 3 |
手环 | 4 |
文档
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。
文档数据会被序列化成json格式
索引
- 索引(index):相同类型的文档的集合
- 映射(Mapping):索引中文档的字段约束信息,类似表的结构约束
商品索引
{
"id":1,
"title":"小米手机",
"price":3499
}
{
"id":2,
"title":"华为手机",
"price":4999
}
{
"id":3,
"title":"三星手机",
"price":3999
}
用户索引
{
"id":101,
"name":"张三",
"age":21
}
{
"id":102,
"name":"李四",
"age":24
}
{
"id":103,
"name":"王五",
"age":18
}
订单索引
{
"id":10,
"userId":101,
"goodsId":1,
"totalFee":294
}
{
"id":11,
"userId":102,
"goodsId":2,
"totalFee":328
}
MySQL与ES概念的对比
MySQL | Elasticsearch | 说明 |
---|---|---|
Table | Index | 索引(Index),是文档的集合、类似数据库的表(table) |
Raw | Document | 文档(Document),是一条条的数据、类似数据库中的行(Row),文档都是json格式 |
Column | Field | 字段(Field),是json文档中的字段,类似数据库中的列(Column) |
Schema | Mapping | Mapping(映射),是索引中文档的约束,例如字段类型的约束,类似数据库的表结构(Schema) |
SQL | DSL | DSL是Elasticsearch提供的json风格的请求语句,用于操作elasticsearch,实现CRUD |
架构
MySQL:擅长事务类型操作,可以确保数据的安全和一致性
Elasticsearch:擅长海量数据的搜索、分析、计算
二者是互补,而非替代的关系
安装elasticsearch、kibana
elasticsearch 7.6.1:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-6-1
kibana 7.6.1:https://www.elastic.co/cn/downloads/past-releases/kibana-7-6-1
jdk:https://www.oracle.com/java/technologies/
7.x版本es、kibana无需自行安装jdk
下载并解压es、kibana到固定路径,并将其bin目录加入环境变量
修改config/kibana.yml配置文件,去掉elasticsearch.hosts前的注释
elasticsearch.hosts: ["http://localhost:9200"]
打开命令行,输入elasticsearch.bat
启动es
新建窗口,输入kibana.bat
启动kibana
es的默认端口是9200,其启动成功界面如下图所示
kibana默认端口是5601,其启动成功界面入下图所示
打开Dev Tools,输入GET /
,查看ES信息