索引
全文检索: 在一篇文章(数据库)中,使用某个关键字,检索出和这个关键字相关的内容!
希望实现全文检索,必须依靠倒排索引实现!
索引: 索引为了加速查询的一种数据结构!一般索引都是使用 Tree 结构实现!
Mysql中,使用B+tree: 多路平衡树。
使用LSM树
HBase: 一级索引,对RowKey进行索引,使用LSM树
正排索引:
举例: 《唐诗三百首》 ------》数据库<br /> 目录 ------------>正排索引<br /> 目录-------------> 静夜思---------->页码<br /> Mysql ,HBase都是正排索引!
倒排索引:
找《唐诗三百首》,所有包含了明月的诗<br /> 目录------------> 对所有诗的内容进行拆词,拆词后,生成索引<br /> 床--------------> 《a》P115,《b》P170<br /> 明月---------> 《静夜思》P300,《xxx》P400<br /> ES的索引是倒排索引!
Lucene 是倒排索引结构
termIndex是正排索引,给切出来的词做的索引
通过索引找到切词,再去具体位置找到想要的数据
可以看到 Lucene 为倒排索引(Term Dictionary)部分又增加一层Term Index结构,用于快速定位,而这Term Index是缓存在内存中的,
但MySQL的B+tree不在内存中,所以整体来看ES速度更快,但同时也更消耗资源(内存、磁盘)
*B-TREE —balanceTree平衡树,当节点过多时,某些子节点会提升为父节点来平衡
ES数据存入结构和索引数据机制
建立索引是有秒级延迟的!
1)索引对象(blog):存储数据的表结构,任何搜索数据,存放在索引对象上 。
2)映射(mapping):数据如何存放到索引对象上,需要有一个映射配置, 包括:数据类型、是否存储、是否分词等。
类似于建表语句
3)文档(document):一条数据记录,存在索引对象上。
4)文档类型(type):一个索引对象,存放多种类型数据,数据用文档类型进行标识。
一、ES
1.概念介绍
查询: 宽泛的概念!只要将某个东西查询出来!
精确查询:
模糊查询:
搜索: 一种特定的查询! 搜索一般指 通过某个关键字,检索出和关键字相关的信息!
搜索引擎,不适合使用关系型数据库存储数据!
原因: 在搜索时,只输入关键字,希望可以得到匹配关键字的所有的数据!如果使用数据库,在查询时一定需要模糊查询,模糊查询会导致索引失效,全表扫描!效率低!
select xxx from xxx where xxx like %aaa% //索引失效,有索引,查询引擎不会用
select xxx from xxx where xxx like aaa% //索引有效,加速查询
关系型数据库查询时,不能分词,联想,得到的不是期望的结果!
2.几个框架
solr : 和es的作用是一样的,都是用于搜索!
solr一般用于中小数据量的静态搜索(数据,很少发生变化)!
es可以用于PB级别数据量的动态搜索(数据可能会不断新增,变化)!
效率上:
solr(老大哥): 小数据量,静态搜索,优于es!
solr在插入数据时,创建索引会有IO阻塞,效率低!
es(新人) : 大数量,动态搜索,优于solr!
es在插入数据时,创建索引,无阻塞! 不是实时,接近实时搜索,延迟秒级!
依赖:
solr 依赖 zk
es不依赖任何框架!
数据类型:
solr 丰富: xml,json
es 单一: json
扩展性:
es更容易扩展,天然集群!
Lucene: 搜索场景,常用的API集合!
本质是一个框架,可以集成到项目中,提供搜索场景常用的API,方便开发!
搜索工具包!
业界公认的非常优秀的搜索框架!
Nutch : 是一个可以直接使用的产品! 基于lucene提供web浏览器的搜索产品! 小型google!
ES : es内置了Lucene,使Lunece变得更好用! 使用RESTFUL风格,使用ES!
直接通过浏览器,发送REST请求,使用ES完成数据的CRUD!
3.全文检索和倒排索引
全文检索:
最初的含义: 提供一个关键字,在整篇文章中,搜索和关键字匹配的片段!
应用开发含义: 提供一个关键字,在整个数据库中,搜索和关键字匹配的数据!
如果要实现全文检索,必须依赖倒排索引!
索引:
是一种数据结构,加速查询!
类似一本百科全书的目录,根据目录直接跳转到感兴趣的书页!
正排索引:在mysql中创建的索引,在hbase中创建的索引,都属于正排索引!
举例: 《唐诗三百首》(数据库)
目录(正排索引): 诗名 ———> 哪一页 ———> 诗的内容
搜索 《静夜思》
倒排索引:
举例: 《唐诗三百首》(数据库)
目录(倒排索引): 存储的不是诗名和页面的对应关系!
词语 ———> 在哪些诗中出现了,诗是哪一页
明月————> 《静夜思》 200页, 《xxx》300页
搜索:包含明月的古诗有哪些
搜索引擎都使用倒排索引!
4.ES的特点
天然分片: 数据在写入时,会被分为若干片,每一片会分布到集群的不同节点!
优势: 横向扩容! 负载均衡! 提高并行IO能力!
天然集群: 一台ES实例也可以组成一个集群! 方便扩容! 如果集群需要增加节点!
只需要在其他节点安装ES,直接启动,自动在网段中寻找ES集群,自动加入集群!
天然索引: mysql和其他的数据库,需要手动创建索引! ES在插入数据后自动创建索引!
文档:
https://www.elastic.co/guide/en/elasticsearch/reference/6.6/index.html
5.REST
REST是一种思想和理念! 推崇使用标准的url路径,表达对资源的操作方式!本质是为了简化和规范url路径的写法!
没有REST之前: 在浏览器发送一个url时,可以随意写
举例: 查询1号员工
http://hadoop102:8088/gmall/getEmployeeById?id=1
http://hadoop102:8088/gmall/findEmployeeById?id=1
http://hadoop102:8088/gmall/retreveEmployeeById?id=1
http://hadoop102:8088/gmall/queryEmployeeById?id=1
http://hadoop102:8088/gmall/tongguoidchaxunyuangong?id=1
规范: /资源/id
可使用不同的请求方式,表达对资源的操作意图!
REST : /Employee/1
发送GET,代表查询
发送POST,代表新增
发送PUT,代表修改
发送DELETE ,代表删除
发送HEAD , 判断是否存在
http://hadoop102:8088/gmall/Emp/1 GET
框架使用RESTFUL的开发理念!这个框架支持REST风格的API操作!
6.B-tree
B(balance)-tree: B树,多路平衡(自愈)树
B+tree: B-tree的改进
LSM树(mysql,hbase)
二、ES的可视化工具Kibana
进入Dev Tools标签进行开发