赞
踩
课程大纲
Elasticsearch的诞生历史
许多年前,一个叫Shay Banon的待业工程师跟随他的新婚妻子来到伦敦,他的妻子想在伦敦学习做一名厨师。而他在伦敦寻找工作的期间,接触到了Lucene的早期版本,他想为自己的妻子开发一个方便搜索菜谱的应用。
直接使用Lucene构建搜索会有很多的坑以及重复性的工作,所以Shay便在Lucene的基础上不断进行抽象来让Java程序嵌入搜索变得更容易一些,经过一段时间的打磨,就诞生了他的第一个开源作品,他给自己的这个作品起了个名字,叫 “Compass”,中文即“指南针”的意思。
之后,Shay找到了一份新工作,新工作是处在一个高性能分布式的开发环境中。他在工作中渐渐发现,越来越需要一个易用的高性能、实时、分布式搜索服务,于是他决定重写Compass,将它从一个库打造成了一个独立的server,并将其改名为Elasticsearch。
Elasticsearch发布的第一个版本是在2010年的二月份,从那之后,Elasticsearch便成了Github上最受人瞩目的项目之一,并且很快就有超过300名开发者加入进来贡献了自己的代码。后来Shay和另一位合伙人成立了公司专注打造Elasticsearch,他们对Elasticsearch进行了一些商业化的包装和支持。但是,Elasticsearch承诺,永远都将是开源并且免费的。
不过悲剧的是,Shay承诺为妻子开发的菜谱搜索应用,到现在还没做出来……
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得。
表名:products
数据:300W
DROP INDEX user_uuid_index ON system_user;CREATE INDEX user_uuid_index ON system_user(user_uuid);EXPLAIN SELECT * FROM system_user WHERE user_uuid = '9c55344c-132d-4ef4-b561-8a0beea1a261';EXPLAIN SELECT * FROM system_user_no WHERE user_uuid = '9c55344c-132d-4ef4-b561-8a0beea1a261';
单字段的查询,速度快于很多,随着字段的增加,速度相应减慢,查询所有字段的速度和查询的速度相似,略低。单纯查询主键ID,并不会变快,索引字段在where后查询,速度极大提升。
1:性能上
数据库:比如我要查找某个商品,根据商品名,比如select * from product where doctname like %keywords%,这样查询的话对于数据量少是可以的,可是一旦你的数据量巨大几万几十万的时候,你的性能将会极大的减弱。
lucene:全文检索,建立一个索引库,一次建立多次使用。在索引库里面会把所有的商品名根据分词器建立索引,就好比新华字典,索引对应document,比如输入衬衫,那么就会根据索引迅速的翻到衬衫对应的商品名,时间迅速,性能很好。
2:多关键字搜索,需要程序员进行处理拼接大量or,性能更差。
3:准确性,比如我搜索:“我|想要|买|一本|java|书籍”。
数据库:select * from product where doctname like %ant%,搜索出来的可以是plant,aplant,planting等等,准确性不高
lucene:它是通过索引查询的,就好像你查字典一样,准确性比数据库的模糊查询高许多
4:高亮处理
5:权重、相关度排序
数据库:数据库要实现该功能也是可以的,可是需要改变表的结构,添加一个字段,然后该字段用于排名,最后查询的时候order by 一下
lucene:查询出来的document都有一个算法(得分),根据算法可以计算得分,得分越高的排名越靠前,比如百度搜索一个东西,一般排名靠前的得分越高,得分通过算法,可以人工控制,比如百度推广,企业给的钱多得分自然高,因此排名靠前
Lucene
根据用户输入的搜索关键词(java),应用服务器使用lucene提供的API搜索索引库,索引库返回搜索结果给应用服务器,应用服务器再把搜索结果响应给用户。
1、2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。“GitHub使用ElasticSearch搜索20TB 的数据,包括13亿文件和1300亿行代码”
2、维基百科:启动以elasticsearch为基础的核心搜索架构
3、SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”
4、百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部
5、20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据新浪使用ES 分析处理32亿条实时日志
6、阿里使用ES 构建挖财自己的日志采集和分析体系
**小结
如果你对分词器不理解:它会把表的数据通过分词器拆成若干的词和数据建立一种映射关系。
回复关键词
JUC 分布式限流 消息队列 alibaba JVM性能调优 Docker
看更多精彩教程
别忘了点个在看哦!转发那就太好了!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。