一、什么是搜索:

说起搜索,大家第一时间会想起百度,谷歌,毕竟我们都是面向百度编程的,但是百度和搜索并不能直接画等号,除此之外,还有垂直搜索,或者又称站内搜索。

垂直搜索(站内搜索):

1.互联网搜索: 电商网站,招聘网站,新闻网站,各种APP

2.IT系统搜索:OA系统。办公自动化软件,会议管理等,

简而言之,搜索就是在任何场景下,根据输入关键字,找寻你想要的任何任何信息。

二、用数据库搜索会怎么样?

如果做软件开发,或者对IT计算机有一定了解的话,都知道,数据都是存储在数据库里面的,例如电商系统:

id

name

description

1

百事可乐

除了百事可乐,还有百世薯片

2

AD可乐

娃哈哈,娃哈哈

3

可口可乐

可口可乐真好喝

 

Select * from SKU where name like '%可乐%'

1.比如说,每天记录的指定字段的文本可能会很长,比如说“商品描述”字段的长度达上千个字符,这时候对数据库中每条记录的所有文本进行扫描,懒判断说,是否包含指定字符 (比如可乐)

2.还不能将搜索词分开,尽可能多的去搜索更多符合你期望的结果,比如搜“可口乐”,就搜不出来“可口可乐”

用数据库来实现搜索,是不太靠谱的,而且性能会很差

三、什么是全文检索和lucene

1.全文检索,倒排索引

ES 两个字段长度相加大于0的 es字段长度判断_lucene

 

以上图为例,索引库中有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作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能