Es的快速入门文档
1.对比数据库理解
ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档。
注意:从ElasticSearch6.X开始,一个Index下只能包含一个Type,因此,在ElasticSearch7.X及之后的版本已经删除了Type的概念。
2.倒排索引
在关系型数据库中,我们经常通过索引找内容,但是在全文检索的场景中,关系型数据库通过like来逐行实现全文检索,数据量上来之后,显然不太现实。所以这时候就诞生了倒排索引,通过关键词建立索引,然后关联文档编号(id),通过关键词的匹配权重(score)来对文档进行排序。
3.IK分词器
github下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
找到和es一样的版本,这里我用的es为7.13.4,ik也选7.13.4版本。
下载之后传到服务器上,创建ik文件夹,解压到ik目录下。创建Dockerfile文件,内容如下:
FROM elasticsearch:7.13.4 ADD ik /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik
如上图,含有ik分词器的es镜像已制作好。替换原来的镜像,重启es即可。
若使用的KubeSphere部署的es,参考下图:
重启之后,验证ik分词器是否安装好了,如下图,则说明已安装好。
这里我以Kibana为例,我们知道,ik分词器提供了两个分词算法:分别为ik_smart(最少切分)和ik_max_word(最细粒度切分)。
我这里输入"少年攻城狮说Java",期望切分成,"少年攻城狮","爱","中华人们共和国"。
ik_smart的切分结果:
ik_max_word的切分结果:
两种算法对比后,发现"少年攻城狮"没有被切到一起,这说明ik分词器字典里没有"少年攻城狮"这个词,这时候对于这种定制化名词,我们就需要自己添加到ik分词器的字典里。
修改成功后,重新打镜像,替换原来的elasticsearch_ik:7.13.4镜像,重启es。
如上图,显然,我们的字典已生效。
4.REST风格操作ES
常用数据类型
4.1.创建索引
第一种创建方式:类似设计表
PUT /test1 { "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "long" }, "birthday": { "type": "date" } } } }
第二种创建方式:默认识别类型
PUT /test2/_doc/1 { "name": "少年攻城狮", "age": 18, "birth": "1998-02-16" } #查看索引库默认属性,确认字段类型的默认值 GET test2
4.2.查看全部索引信息
GET _cat/indices?v
4.3.修改文档数据(推荐)
这种修改,当字段没有传的时候,不会覆盖成null值。
POST /test2/_doc/1/_update { "doc": { "name": "张无忌" } }
4.4.删除索引
DELETE test
4.5.删除文档数据
DELETE test2/_doc/1
4.6.新增或修改文档数据(不推荐使用这种修改,推荐使用4.3的修改)
这个方法,存在就修改,不存在就新增,用这种方法做修改,少写了某个字段的时候,少写的字段的值会被赋上null值。
PUT /student/user/1 { "name": "张三", "age": 16, "desc": "一顿操作猛如虎", "tags": ["抽烟","喝酒"] } PUT /student/user/2 { "name": "里斯", "age": 18, "desc": "天王盖地虎", "tags": ["学习","喝酒"] } PUT /student/user/3 { "name": "王五", "age": 22, "desc": "宝塔镇河妖", "tags": ["旅游","喝酒"] } #根据id查看数据 GET /student/user/1
4.7.简单的查询
#根据id查询
GET /student/user/1 #_search代表查询操作,q代表查询条件
GET student/user/_search?q=name:张三
4.8.复杂查询
标签:name,---,索引,ik,文档,es,student,ElasticSearch,Es From: https://www.cnblogs.com/hujunwei/p/16988570.html