1、理解ElasticSearch各名词含义
ElasticSearch对比Mysql
Mysql数据库 | Elastic Search |
---|---|
Database | 7.X版本前有Type,对比数据库中的表,新版取消了 |
Table | Index |
Row | Document |
Column | mapping |
Elasticsearch是使用Java开发的,8.1版本的ES需要JDK17及以上版本;es默认带有JDK,如果安装es环境为java8,则会默认使用自带环境;
索引、文档、映射
索引index
跟我们常说的数据库索引没有任何关系,它其实相当于数据库里面存数据的表;
文档document
对应我们数据库的数据,即每行数据;
映射mappding
对应我们数据库的字段,自己设置的话需要设置字段类型,不设置在插入文档内容的时候es会按照字段内容设置字段类型;
分片、副本
分片shards
数据量特大,没有足够大的硬盘空间来一次性存储,且一次性搜索那么多的数据,响应跟不上,ES提供把数据进行分片存储,这样方便进行拓展和提高吞吐;
副本replicas
分片的拷贝,当主分片不可用的时候,副本就充当主分片进行使用
索引分片的备份,shard和replica一般存储在不同的节点上,用来提高高可靠性
ES默认为一个索引创建1个主分片和1个副本,在创建索引的时候使用settings属性指定,每个分片必须有零到多个副本
注意:索引一旦创建成功,主分片primary shard数量不可以变(只能重建索引),副本数量可以改变
正排索引、倒排索引
-
正排索引 (Forward Index )
- 指将文档的内容按照文档的顺序进行索引,每个文档对应一个索引条目,包含了文档的各个字段的内容
- 正排索引的优势在于可以快速的查找某个文档里包含哪些词项。但是 正排不适用于查找包含某个词项的文档有哪些
倒排索引(Inverted Index)
-
根据关键词构建的索引结构,记录了每个关键词出现在哪些文档或数据记录中,适用于全文搜索和关键词检索的场景
-
它将文档或数据记录划分成关键词的集合,并记录每个关键词所出现的位置和相关联的文档或数据记录的信息
2、默认分词及IK分词区别演示
使用es自带分词器对内容进行分词
使用ik-smart进行分词
使用ik_max_word进行分词
分词模式 | 特点 |
es默认standard | 对中文按照一个一个字进行分词 |
ik智能分词ik_samrt | 按照中文词组进行分词,不会重复对单个文字进行分词 |
ik最小颗粒分词ik_max_word | 除了对词组进行分词外,还会对单个文字,及多词组进行分词 |
理解完分词模式后,我们在插入文档的时候是可以测试文档默认使用了哪种分词;在我的测试结果中,集成IK的ES默认使用的是ik_max_word;
3、索引及映射操作
索引常用接口:
接口名称 | 请求方式 | 接口地址 | 请请求参数 | 请求结果 |
---|---|---|---|---|
查看所有索引 | GET | /* | 索引列表,没有数据返回{} | |
创建索引 | PUT | /index_name | { "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": { "properties": { "id": { "type": "keyword" }, "createTime": { "type": "date" }, "name": { "type": "text" } } } } | 请求成功返回 { "acknowledged": true, "shards_acknowledged": true, "index": "file" } |
是否存在 | HEAD | /index_name | 200索引存在 404索引不存在 | |
获取索引 | GET | /index_name | 索引信息 | |
更新索引设置 | PUT | /index_name | { "settings": { "number_of_replicas": 2 } } | |
删除索引 | DELETE | /index_name | { "acknowledged": true } |
mapping无法后面进行单独设置,或者插入文档的时候es自动识别进行填入默认类型;
4、文档操作(“/_doc”代替之前版本type,固定写法)
接口名称 | 请求方式 | 接口地址 | 请请求参数 | 请求结果 |
---|---|---|---|---|
查询文档 | GET | /index_name/_doc/1 | ||
新增文档指定ID | PUT | /index_name/_doc/1 | { "id":5555, "name":"小滴课堂短链平台", "createDate":"20240311" } | |
新增文档不指定ID | POST | /index_name/_doc | { "id":5555, "name":"小滴课堂短链平台", "createDate":"20240311" } | |
修改文档 | PUT/POST | /index_name/_doc/1 | { "id":5555, "name":"小滴课堂", "createDate":"20240312" } | |
删除文档 | DELETE | /index_name/_doc/1 |
文档存储文件的类型为JSON;文档ID与我们参数的id不是同一个参数,文档ID类似于mysql设置了一个自增ID,我们在插入数据的时候可传值,也可不传值;
5、内容搜索
搜索接口:GET /index_name/_search
请求参数:name为我们自己的字段,这里可以根据自己字段进行调整
{"query": {"match": {"name": "听取"}}
}
返回字段解释:
字段解释took字段表示该操作的耗时(单位为毫秒)。timed_out字段表示是否超时。hits字段表示搜到的记录,数组形式。total:返回记录数,本例是1条。max_score:最高的匹配程度,本例是1.0
关于es类型较多,后续单独出一篇文章进行记录
6、参考文章
ElasticSearch8.X入门教程:ElasticSearch8.X入门教程_elasticsearch 8.x 学习-CSDN博客