theme: channing-cyan
什么是elasticsearch?
一个开源的分布式搜索引擎,底层是开源库Lucene,可以用来实现海量数据的搜索、日志统计、分析、系统监控等功能。对搜索引擎的操作封装成了RESTful的API,通过http请求就能对其进行操作。
ELK技术栈
准备工作之安装docker
mac商城直接安装desktop, 安装好了直接pull elasticsearch和kibana镜像(注意版本适配,参考官网)
运行容器
访问kibana localhost:5601
-
获取token
找到elasticsearch容器运行IDdocker ps
进容器docker exec -it 容器运行ID bash
生成tokenbin/elasticsearch-create-enrollment-token --scope kibana
-
获取elasticsearch的账号密码
找到elasticsearch容器运行IDdocker ps
进容器docker exec -it 容器运行ID bash
自动生成账号密码./bin/elasticsearch-setup-passwords auto
登陆进去就可以愉快的玩耍devtool
ES数据库基本概念
索引和映射
索引就像数据库里的表,映射就像数据库中定义的表结构 例如:
- 所有用户文档,就可以组织在一起,称为用户的索引;
- 所有商品的文档,可以组织在一起,称为商品的索引;
- 所有订单的文档,可以组织在一起,称为订单的索引;
因此,我们可以把索引当做是数据库中的表。
数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping) ,是索引中文档的字段约束信息,类似表的结构约束。
Mapping映射
mapping是对索引库中文档的约束,常见的mapping属性包括:
-
type:字段数据类型,常见的简单类型有:
-
字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
keyword类型只能整体搜索,不支持搜索部分内容
-
数值:long、integer、short、byte、double、float、
-
布尔:boolean
-
日期:date
-
对象:object
-
-
index:是否创建索引参与搜索,默认为true
-
analyzer:使用哪种分词器
-
properties:该字段的子字段
举个🌰
{
"age": 21,
"weight": 52.1,
"isMarried": false,
"info": "真相只有一个!",
"email": "[email protected]",
"score": [99.1, 99.5, 98.9],
}
对应的每个字段映射(mapping):
- age:类型为 integer;参与搜索,因此需要index为true;无需分词器
- weight:类型为float;参与搜索,因此需要index为true;无需分词器
- isMarried:类型为boolean;参与搜索,因此需要index为true;无需分词器
- info:类型为字符串,需要分词,因此是text;参与搜索,因此需要index为true;分词器可以用ik_smart
- email:类型为字符串,但是不需要分词,因此是keyword;不参与搜索,因此需要index为false;无需分词器
- score:虽然是数组,但是我们只看元素的类型,类型为float;参与搜索,因此需要index为true;无需分词器
索引库操作
CRUD简单描述:
- 创建索引库:PUT /索引库名
- 查询索引库:GET /索引库名
- 删除索引库:DELETE /索引库名
- 修改索引库(添加字段):PUT /索引库名/_mapping
创建
查询
修改(添加新字段)
文档和字段
一个文档就像数据库里的一条数据,字段就像数据库里的列,所有文档组织在一起可以称之为索引。 elasticsearch是面向文档(Document) 存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中:
而Json文档中往往包含很多的字段(Field) ,类似于mysql数据库中的列。
文档操作
文档操作有哪些?
- 创建文档:POST /{索引库名}/_doc/文档id
- 查询文档:GET /{索引库名}/_doc/文档id
- 删除文档:DELETE /{索引库名}/_doc/文档id
- 修改文档:
- 全量修改:PUT /{索引库名}/_doc/文档id
- 增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}
创建
查询
修改
- 全量修改是覆盖原来的文档,其本质是:
- 根据指定的id删除文档
- 新增一个相同id的文档
- 增量修改
- 增量修改是只修改指定id匹配的文档中的部分字段。
POST /{索引库名}/_update/文档id
{
"doc":
{
"字段名": "新的值",
}
}
查看所有索引
IK分词
github:https://github.com/infinilabs/analysis-ik
进es容器 安装对应版本分词器后需重启es服务:
`bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.13.0`
IK分词器包含两种模式:
-
ik_smart
:最少切分 -
ik_max_word
:最细切分
测试分词功能:
先到这