ElasticSearch 基本概念和基础操作
安装
- ElasticSearch -> 参考官方文档,下载压缩包解压即可使用
- ElasticSearch head → 相当于一个可视化工具,用来查看数据 -> 可以直接安装浏览器插件
- kibana (查询工具) -> 参考官方文档,下载压缩包解压即可使用
- ik 分词器(中文分词器) → GitHub 下载后直接下载放入 plugins 目录 → 在config目录下可以配置自己的词典
核心概念
关系型数据库 | ElasticSearch |
---|---|
数据库 database | 索引 index |
表 table | 类型 type |
行 row | 文档 document |
字段 columns | 字段 fields |
集群
集群(cluster) 是一个或多个节点的集合。
节点
节点(node) 是一个 elasticsearch 的运行实例,也就是一个进程,多个节点组成集群,节点存储数据,并参与集群的索引、搜索和分析功能。
索引
索引(index) 是具有某种相似特性的文档集合。(我感觉索引更像是 MySQL 中的表的概念)特别是7.0版本取消了类型的概念,如果把文档看做一条数据,索引是拥有多个相同结构文档的集合,也就是表。
文档
文档(document) 是可以被索引的基本信息单元。JSON文档。
分片
分片是索引的水平拆分。当一个索引的数据量太大,可以把一个索引拆分成多个分片,每个分片本身都是具有完整功能的“独立索引”,可以分布在集群中的任何节点上。每个分片都是一个完整的 Lucene 索引。
一般在创建索引的时候就要预判分片数量并创建,分片的数量理论上不可变更,唯一的办法重建索引。
副本
每个分片都可以有一个或多个备份,分片的副本会部署在不同节点上,在分片或节点发生故障时提供高可用性。
副本也可以用于搜索,可以提高搜索性能和水平扩展吞吐量。类似于主从分离,一主多从。
分片和副本的区别和联系
- 本质上都是完整的 Lucenes 索引
- 假设一个索引定义了3个分片、2个副本,那么总共就有9个分片,其中3个主分片,每个分片有2个副本。主分片就是建立索引时首先建立的分片,或者说当主分片失效时会重新选择出一个副本作为主分片
- 当索引(插入数据)时,数据会首先到达主分片,然后再把请求分发到其他副本
- 当搜索(查询数据)时,主分片和副本都可以接受请求、搜索和分析数据,二者没有区别
基础操作
关于索引的基本操作
创建索引并添加一个数据(这种创建方式貌似已经过时,type将在7.x版本被废弃)
PUT /索引名/~类型名~/文档id
{请求体}
完成了自动增加索引!数据也成功的添加了,这就是我们在初期可以把es当做数据库学习的原因!
创建索引,指定字段类型
PUT /索引名
{
"mappings": {
"properties": {
"字段名": {
"type": "字段类型"
},
"name": {
"type": "text"
},
"age": {
"type": "long"
},
"birthday": {
"type": "date"
}
}
}
}
查询操作
通过get请求获取索引具体的信息
创建时插入一条数据,不指定字段类型,es会自动给字段分配类型
_doc 是在type被废弃后的默认type
扩展命令
通过 GET /_cat 可以获得es很多信息
修改索引
有多种方式可选
删除索引和文档
关于文档的基本操作
简单命令
添加数据
查询数据
复杂查询
查询出来的hits对象包含哪些东西
过滤结果,相当于 select name, desc .......
排序
分页查询
布尔查询
must (相当于 and) 所有条件都要匹配
should (相当于 or) 部分条件匹配
must not (相当于 not)
过滤结果集和进行范围查询
gt 大于 gte 大于等于 lt 小于 lte 小于等于
匹配多个条件,匹配条件越多,分值越高
keyword 和 text, 精确匹配和模糊匹配,keyword 类型的字段不会被分词器解析
term 精确查询,不使用分词器解析
match 使用分词器解析
高亮显示
自定义高亮标签
<全文完>