一、什么是搜索:
说起搜索,大家第一时间会想起百度,谷歌,毕竟我们都是面向百度编程的,但是百度和搜索并不能直接画等号,除此之外,还有垂直搜索,或者又称站内搜索。
垂直搜索(站内搜索):
1.互联网搜索: 电商网站,招聘网站,新闻网站,各种APP
2.IT系统搜索:OA系统。办公自动化软件,会议管理等,
简而言之,搜索就是在任何场景下,根据输入关键字,找寻你想要的任何任何信息。
二、用数据库搜索会怎么样?
如果做软件开发,或者对IT计算机有一定了解的话,都知道,数据都是存储在数据库里面的,例如电商系统:
id | name | description |
1 | 百事可乐 | 除了百事可乐,还有百世薯片 |
2 | AD可乐 | 娃哈哈,娃哈哈 |
3 | 可口可乐 | 可口可乐真好喝 |
Select * from SKU where name like '%可乐%'
1.比如说,每天记录的指定字段的文本可能会很长,比如说“商品描述”字段的长度达上千个字符,这时候对数据库中每条记录的所有文本进行扫描,懒判断说,是否包含指定字符 (比如可乐)
2.还不能将搜索词分开,尽可能多的去搜索更多符合你期望的结果,比如搜“可口乐”,就搜不出来“可口可乐”
用数据库来实现搜索,是不太靠谱的,而且性能会很差
三、什么是全文检索和lucene
1.全文检索,倒排索引
以上图为例,索引库中有1,2,3,4 四条数据,lucene会针对记录进行分词,并建立倒排索引,
当用户输入搜索词时(可乐),lucene会根据建立好的倒排所索引,将数据1,2,3,4数据返回给前端,这个过程就叫做全文检索的过程
数据库的数据有100万条,按照之前的思路,其实就要扫描100万次,而且每次扫描,都需要判断是否还有指定的字符,而且还不能将搜索的词进行拆分。
利用倒排索引进行搜索的话,假如100万条数据拆分出来的词语,假设有1000万个词语,那么就有可能有1000万行,我们很可能并不需要搜索1000万次,很可能第一次搜索的时候我们就能找到数据,也有可能第10次,第100词
2、lucene
lucene就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法,我们用java进行开发时,引入lucene.jar然后基于lucene的api进行开发就可以了,用lucene我们就可以去讲已有的数据建立索引,lucene会在本地磁盘上给我们建立索引的数据结构,另外的话,我们也可以用lucene提供的一些功能和api来对磁盘上的数据进行CURD操作。
四、Elasticsearch的功能,干什么的
Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统
1)分布式的搜索引擎和数据分析引擎
搜索:百度,网站的站内搜索,IT系统的检索
数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是哪些
2)全文检索,结构化检索,数据分析
全文检索:我想搜索商品名称包含的商品,select * from products where product_name like "%商品名称%"
结构化检索:我想搜索商品分类为日化用品的商品都有哪些,select * from products where category_id='日化用品'
可以进行部分匹配、自动完成、搜索纠错、搜索推荐
数据分析:我们分析每一个商品分类下有多少个商品,select category_id,count(*) from products group by category_id
3)对海量数据进行近实时的处理
分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索 海联数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了 近实时:检索个数据要花费1小时(这就不要近实时,离线批处理,batch-processing);在秒级别对数据进行搜索和分析
跟分布式/海量数据相反的:lucene,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量
Elasticsearch的特点
(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司 (2)Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat) (3)对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂 (4)数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能