elasticsearch学习笔记

[if !supportLists]1       [endif]什么是Elasticsearch

[if !supportLists]1.1.1   [endif]基于 Apache Lucene 构建的开源搜索引擎

[if !supportLists]1.1.2   [endif]采用java编写,提供简单易用的RESTFul API

[if !supportLists]1.1.3   [endif]轻松的横向扩展,可支持PB级别的结构化和非结构化数据处理

[if !supportLists]1.2      [endif]应用场景

[if !supportLists]1.2.1   [endif]海量数据分析引擎

[if !supportLists]1.2.2   [endif]站内搜索引擎

[if !supportLists]1.2.3   [endif]数据仓库


[if !supportLists]1.3      [endif]分布式、高性能、高可用、可伸缩的搜索和分析系统

[if !supportLists]1.4      [endif]什么是搜索

搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息。

[if !supportLists]1.4.1   [endif]搜索分类:

百度只是一个搜索引擎

互联网站内搜索:淘宝搜索商品

垂直搜索(站内搜索)

[if !supportLists]1.5      [endif]如果用数据库做搜索会怎么样?

数据都是存储在数据库里面的,搜索时需要对每条记录的所有文本进行扫描,扫描后和关键字进行匹配,效率低下

还不能将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“生化机”,就搜索不出来“生化危机”

[if !supportLists]1.6      [endif]什么是全文检索

比如搜索生化危机,会把生化危机进行拆分为生化和危机,把存储的文本内存拆分为关键词和id (生化,1,2,3),进行匹配时直接取数据1,2,3这3条进行返回,该过程就叫全文索引。

[if !supportLists]1.6.1   [endif]什么是倒排索引

把生化危机进行拆分为生化和危机,把存储的文本内存拆分为关键词和id (生化,1,2,3),并且进行倒序排序

[if !supportLists]1.7      [endif]什么是Lucene

lucene,就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我们就用java开发的时候,引入lucene

jar,然后基于lucene的api进行去进行开发就可以了。用lucene,我们就可以去将已有的数据建立索引,lucene会在本地磁盘上面,给我们组织索引的数据结构。另外的话,我们也可以用lucene提供的一些功能和api来针对磁盘上额

[if !supportLists]1.8      [endif]什么是Elasticsearch

ElasticSearch是一个基于Lucene的搜索服务器。包含多态es节点(分布式、节点中包含Lucene)。




[if !supportLists]1.9      [endif]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,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量


----------------------------------------------------------------------------------------------------------------------


[if !supportLists]1.10 [endif]Elasticsearch的适用场景

国外

(1)维基百科,类似百度百科,牙膏,牙膏的维基百科,全文检索,高亮,搜索推荐

(2)The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)

(3)Stack

Overflow(国外的程序异常讨论论坛),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案

(4)GitHub(开源代码管理),搜索上千亿行代码

(5)电商网站,检索商品

(6)日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)

(7)商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买

(8)BI系统,商业智能,Business Intelligence。比如说有个大型商场集团,BI,分析一下某某区域最近3年的用户消费金额的趋势以及用户群体的组成构成,产出相关的数张报表,**区,最近3年,每年消费金额呈现100%的增长,而且用户群体85%是高级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化


国内

(9)国内:站内搜索(电商,招聘,门户,等等),IT系统搜索(OA,CRM,ERP,等等),数据分析(ES热门的一个使用场景)


----------------------------------------------------------------------------------------------------------------------


[if !supportLists]1.11 [endif]Elasticsearch的特点

(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司

(2)Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat)

(3)对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂

(4)数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能

你可能感兴趣的:(elasticsearch学习笔记)