1.什么是搜索?
- 搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息。
2.如何实现搜索?
- OA系统,比如:通过名字搜索员工等等。
- mysql :
select * from employee e where e.name like "%李雷%";
select * from employee e where e.comment like "好%";
- 存在的问题:
a.性能
b.比如搜索“优秀工”,mysql 无法支持。
3.全文检索
- 全文数据库是全文检索系统的主要构成部分。所谓全文数据库是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。
- 全文数据库不仅存储了信息,而且还有对全文数据进行词、字、段落等更深层次的编辑、加工的功能。
- 所有全文数据库无一不是海量信息数据库。
4.倒排索引
(1).传统数据库存储:
id | 描述 |
---|---|
1 | 优秀员工 |
2 | 销售冠军 |
3 | 优秀团队领导 |
4 | 优秀项目 |
(2).倒排索引处理步骤:
-
切词:
优秀员工 —— 优秀 员工
销售冠军 —— 销售 冠军
优秀团队领导 —— 优秀 团队 领导
优秀项目 —— 优秀 项目 -
建立倒排索引:关键词id
关键词 | id |
---|---|
优秀 | 1,3,4 |
员工 | 1 |
销售 | 2 |
团队 | 3 |
... | ... |
5.Lucene:全文检索引擎
- Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene 能够几乎适用于所有的搜索应用程序。
- 换句话说,使用 Lucene 可以轻松完成上述步骤。
6.Elasticsearch
- Elasticsearch 是一个高度可伸缩的开源全文搜索和分析引擎。它允许你以近实时的方式快速存储、搜索和分析大量的数据。它通常被用作基础的技术来赋予应用程序复杂的搜索特性和需求
- Elasticsearch ,是基于 lucene 开发的,隐藏复杂性,提供简单易用的restful api接口、java api接口还有其他语言的api接口)。
7.Elasticsearch特点
- 可以作为一个大型分布式集群(数百台服务器)技术,处理 PB 级数据,服务大公司;也可以运行在单机上,服务小公司。
- Elasticsearch 不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的 ES 。
- 对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下 ES ,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂。
- 数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理; Elasticsearch 作为传统数据库的一个补充,提供了数据库所不能提供的很多功能。
网友评论