1.什么是搜索?
百度 = 搜索,这是不对的
垂直搜索(站内搜索)
互联网的搜索:电商网站,招聘网站,新闻网站,各种app
IT系统的搜索:OA软件,办公自动化软件,会议管理,项目管理,员工管理
搜索:就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键子,然后期望找到这个关键字相关的有些信息
2.如果用数据库做搜索会怎么样?
- 每条记录的指定字段的文本,可能会很长,甚至长达数千或数万个字符
- 不能将搜索词拆分开来,尽可能去搜索更多的符合期望的结果
使用数据库实现不太靠谱!!!
3.什么是全文检索和Lucene
- 全文检索,倒排索引
- Lucene,一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码, 包括各种算法。使用java开发时,引入Lucene jar,然后基于Lucene的api进行开发即可。用Lucene可以将已有数据建立索引,Lucene会在本地磁盘上组织索引的数据结构。另外,也可使用Lucene提供的功能和api来针对磁盘上的索引数据,进行索引。
4.什么是Elasticsearch?
分布式,高性能,高可用,可伸缩的搜索和分析系统
- 自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行
- 自动维护数据的冗余副本,在某些机器宕机了,不会丢失任何的数据
- 封装了更多的高级功能,提供了更多高级的支持。可快速开发应用,开发更加复杂的应用:复杂的搜索功能,聚合分析的功能,基于地理位置的搜索
5.Elasticsearch的功能
- 分布式的搜索引擎和数据分析引擎
分布式,搜索,数据分析 - 全文检索,结构化检索,数据分析
全文检索:搜索商品名称包含牙膏的商品
结构化搜索:搜索商品分类为日化用品的商品都有哪些,select * from products where category_id = ‘日化用品’
数据分析:分析每一个商品分类下有多少个商品 - 对海量数据进行近实时的处理
分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索
海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理
尽实时:检索个数据要花费1分钟(这就不叫尽实时,叫离线批处理,batch-processing)。尽实时,就是说对数据的搜索和分析在秒级别
跟分布式/海量数据相反的: lucene, 单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量
6.Elasticsearch 的使用场景
- 维基百科
- 新闻网站
- GitHub
- 电商网站
- 日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)
- 商品价格监控网站
- BI系统, 商业智能
7.Elasticsearch的特点
- 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可运行在单机上,服务小公司
- 并非新技术,主要是将全文检索,数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES
- 对用户而言,开箱即用,非常简单
- 数据库的功能面对多领域是不够用的,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理,Elasticsearch作为传统数据库的一个补充,提供了数据库所不能提供的很多功能