提到搜索的第一印象,我们大部分人应该都会想到百度:当我们想找寻一些信息的时候,都可以上百度去搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻。
互联网的搜索:电商网站,招聘网站,新闻网站,各种app的搜索。比如说淘宝、京东商品的搜索。 IT系统的搜索:OA软件,办公自动化软件,会议管理,日程管理,项目管理,员工管理的搜索,比如说搜索“张三”,可以查到“张三儿”,“张小三的员工”;有个电商网站,卖家登录后台管理系统,可以在订单模块搜索“牙膏”,搜索“牙膏相关的订单”
搜索,就是在任何场景下,找到你想要的信息,输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息。
2、如果用数据库做搜索会怎么样?如果数据都是存储在数据库里面的,比如说电商网站的商品信息,招聘网站的职位信息,新闻网站的新闻信息等等。
如果是一个电影网站内部实现的搜索功能,去使用数据库去进行搜索。
1、有可能每条记录的指定字段的文本会很长,比如说“简介”字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描, 2、还不能将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“速度激情”,就搜索不出来“速度与激情”
用数据库来实现搜索,是不太靠谱的。通常来说,性能很差,效果很差。
3、什么是全文检索和Lucene?(1)全文检索:
比如数据库中的数据一共100W条,如果使用数据库做搜索,其实就是要扫描100W次,而且每次扫描都要匹配字段所有的字符,确认是否包含搜索的关键词,还无法将搜索关键词拆解进行检索
ES利用倒排索引,将100W条数据,进行分词,这样就能通过倒排索引快速的检索出含有关键词的数据,倒排索引拆分的关键词可能很多,假如也达到了100W个词语,但是倒排索引的查询速度是远快于数据库进行搜索的,它不用每一条数据都扫描所有的字符。
(3)lucene:就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我们就用java开发的时候,引入lucene jar,然后基于lucene的api进行去进行开发就可以了。用lucene,我们就可以去将已有的数据建立索引,lucene会在本地磁盘上面,给我们组织索引的数据结构。另外的话,我们也可以用lucene提供的一些功能和api来针对磁盘上的索引数据,进行搜索。
4、什么是Elasticsearch?The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)。 能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视 化。
Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎, 是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上 百台服务器,处理 PB 级别的数据。
lucene部署在单台机器上面时,假设磁盘能够存储500G的数据量,如果此时数据量是1T,在一台机器上是放不下的;那么就再添加一台机器,实现分布式架构,让数据散落在多台机器上。
如果使用lucene部署多台机器进行数据的存储和搜索,实现起来是很麻烦的。
部署的多台机器中,有可能出现宕机,导致宕机的机器中的数据就无法搜索了。
那么此时ElasticSearch就出现了,每个ES节点都封装了lucene,
ElasticSearch优点:
1ElasticSearch能够自动维护数据,比如数据分布到多个节点的索引建立,搜索请求分不到多个节点的请求,能够高性能的建立索引,以及执行搜索
2自动维护数据的冗余副本,保证一些机器宕机,不会丢失任何的数据,保证了数据的高可用
3封装了更高级的功能,应对复杂的应用,复杂的搜索功能,聚合分析的功能、基于地理位置的搜索等等。
4便于水平扩展