ElasticSearch基础学习
一、ES核心概念
1.与MySQL对比
- MySQL — ES(一切都是JSON)
- 数据库 (database)— 索引(indices
- 表(table)— type(慢慢弃用)
- 行(row)— documents(文档)
- 字段(columns)— fields
2.物理设计
- ES在后台把每个索引划分成多个切片,每个分片可以在不同的服务器间迁移。
- 默认就是一个集群,集群名默认就是elasticsearch。
- 节点和分片:
i.一个集群至少有一个节点,而一个节点就是一个es进程,节点可以有多个索引默认的。
ii.如果创建索引,那么索引将会有五个主分片(分片就倒排索引)构成,每个主分片都有一个复制分片(主分片和复制分片都不在同一节点上。) - 倒排索引
i.在es不扫描全部文档的情况下,就能知道那些文档包含特定的关键字。
ii.倒排索引采用Lucene倒排索作为底层。这种索引适用于全文快速索引。
iii.为了创建倒排索引,我们首先要将每个文档拆分成独立的词(或者称为词条),然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在那个文档。
3.逻辑设计
- 文档:自我包含,一篇文档同时包含字段和值,也就是同时包含(key:value);可以是层次型的,一个文档可以包含自文档。(就是一个json对象);文档可以想象成,就是我们的一条条数据。
- 类型:类型是文档的逻辑容器,一般用的很少,或者先定义好再使用。
- 索引:索引是映射类型的容器,es中索引是个非常大的集合。索引存储了映射类型的字段和其他设置,然后被存储再各个分片上。
- 索引和搜索数据的最小单位是文档。
- 一个索引可以包含多个文档。
4.小结
- .一个ES索引就是由多个Lucene索引构成的。
- 先建索引,再设置字段类型,将文档导入即可。
二、IK分词器
1.定义
即把一段中文或者别的划分成一个个的关键字。(默认是把每个字看成一个词)。
2.下载和安装
- 在Githup直接下载;上面的百度网盘中也有;下载完成之后,直接放入到es的插件中;完成之后需要全部重启。
- 可以通过dos窗口的(elasticsearch-plugin list )查看ik分词器是否被加载完成。注意需要进入到相应的目录下命令才有效。
- 使用Kibana进行测试。
3.两种分词算法
- ik_smart(最少切分):1.不会切成有重复的词。
- ik_max_word(最细粒度划分):1.穷尽所有词库的可能。
- 在ik分词器目录下的condig配置中进行增加增加的.dic文件,并将新增的文件到ik的配置文件中,重启即可使用。
三、索引的操作
1.创建索引
- PUT 命令(localhost:9200/索引名称/类型名称/文档/id)
- GET 索引名称 (获取索引的信息)
2.查看索引
- GET _cat/… 可以查看很多东西
3.修改索引
- PUT 命令(localhost:9200/索引名称/类型名称/文档/id)
- POST/索引名/类型名(可以使用默认的_doc)/文档id {请求体} (暴力修改)
4.删除索引
- DELETE 索引名称(文档)
四、文档的操作
1.基本操作(增删改查)
- 和前面相同的。
2.复杂操作(排序、分页、模糊、高亮)
- GET 索引名/类型名/_search {“query”:{查询命令}}
- GET 索引名/类型名/_search {“query”:{查询命令},"_source":[“xxx”,“xxx”]} (_source为结果的过滤;xxx为某字段)
- GET 索引名/类型名/_search {“query”:{查询命令},“sort”:[{“xxx”:{“order”:“desc”}}]} (sort为排序;XXX为某字段)。
- GET 索引名/类型名/_search {“query”:{查询命令},“from”: 0,“size”: 2 (from:从第几条开始,size:显示几条) 分页
- GET 索引名/类型名/_search {“query”:{查询命令},“hightlight”:{“pre_tags”:“xxxxx”,“post_tags”:"",“fields”:{“xxx”:{}}} 高亮显示某字段,自定义高亮搜索。
3.小结
- Hit:索引和文档的信息;查询的结果总数;查询出来的具体的文档;查看分数。
- match:会使用分词器解析。
- term:直接精确查询。
- text:可以被分词器解析 keyword:被当成一个词,没有被分词。
五、数据类型
- 字符串类型(text、keyword)
- 数值类型(long、integer、short、byte、double、float、half、float、scaled)
- 日期类型(date)
- 布尔类型(boolean)
- 二进制类型(binary)
六、小结
今天,只是对ES的基础进行了整理和学习,在此记录一下。下一篇继续。