关键词:
介绍
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,下面就介绍ElasticSearch为什么是分布式的,可扩展,高性能,高可用。
什么是搜索
在我们想知道一些信息时,就会使用一些搜索引擎来获取我们想要的数据,比如搜索我们喜欢的一款游戏,或者喜欢的一本书等等,这就是提到搜索的的第一印象,说直白点就是在任何场景下找寻你想要知道的信息,这就是搜索。
- 现在的搜索也称为垂直搜索
垂直搜索引针对某一个行业的专业搜索引擎,比如说电商网站,新闻网站,各种app内部等等,他们都是搜索引擎的细分和延伸,在抽取出需要的数据进行处理后再以某种形式返回给用户。
如果用数据库来做搜索会怎么样
例如我们这里有一张商品表,现在我们要搜索"衣服"这个关键字,,执行了 select * from products where product_name like %衣服%,(假设这里没有其他任何提升效率的设置)来进行搜索,或者进行其他字段的匹配,可以分析一下这个方式的缺点。
1,比如说,每条记录的指定字段的数据会很长,比如说“商品介绍”这个字段,可能会有几千或者几万个字符,那么搜索的时候就会去这些字符里面进行匹配是否包含要搜索的关键词。
2,这种方式只能搜索到完全包含“衣服”这个两个字符的记录,但是可能会有一些特殊的情况,某几条记录里面的“衣服”关键词并不是连续的,可能衣服中间会插入某些字符,这个时候就搜索不出来这些记录了,但是这个商品又是我们希望搜索出来的,这个时候这种方式的弊端就十分明显了。
总的来说用数据库来实现搜索是不太靠谱的,性能会很差。
什么是全文检索
首先需要了解什么是倒排索引?我们这里先上一幅图,里面有4条记录。
现在将这4条记录的内容进行拆分成一些词条,这个过程叫做分词
现在我们得到了这4条记录拆分出来词语,然后将这写词语放到一个列表中,并记录他们的ID,这个分析出来的就是 倒排索引
现在我们输入 生化电影 这个关键词,这个时候搜素引擎将我们输入的内容分词为 生化 和 电影 这两个关键词,然后使用这个两个关键词去倒排索引里面匹配,发现包含 生化 这个关键词的记录有ID为 1,2,3,4这四条记录,包含 电影 这个关键词的有ID为1这条记录,由于ID为1这条记录已经被录入了,所以就被排除在外了, 这时候我们就得到了想要ID为1234这4条记录,同理,如果我们只输入 电影 这个关键词,那么符合条件的只有ID为1这条记录了。
全文检索就是从拆分词语,存入倒排索引,然后分析用户输入的内容,在倒排索引里面进行匹配,这个过程就是全文检索。
什么是ElasticSearch
首先需要知道什么是lucene,lucene它就是一个Java的jar包,里面实现了倒排索引的算法和其他的全文检索相关的东西,ElasticSearch就是对lucene进行了封装,为什么有lucene了还要ElasticSeaearch来干什么呢?首先,当数据量很大的时候,比如有1PB的数据,这个时候数据放在同一台机器上基本就不行了,那么把数据分开来放在多台机器上呢?那就变成分布式了,这个时候数据前端获取数据的时候到底去那一台机器上面去获取数据呢?这个时候就很麻烦了,如果某一台机器宕机了,那么这个机器上的数据就获取不到了,这也就无法保证高可用性了,还有数据存储的时候怎么到底存入那台机器等等,这些都需要人为的处理和维护。这个时候ElasticSearch就应运而生了,它就将lucene这些弊端给完全解决了。
举例一些优点
- 高性能,自动维护数据分布到多个节点进行索引的建立,还有搜索请求分布到多个节点的执行。
- 高可用,自动维护数据的冗余副本,保证说,一些机器宕机了,不会造成数据的丢失。
- 封装了更多的高级功能,以给我们提供更多的高级支持,让我们快速的开发应用,开发更加复杂的应用,复杂的搜索功能,聚合分析的功能,基于地理位置的搜索(比如周围一公里内有几家咖啡厅)等等。
- 动态扩容,当我们数据量急剧提升的时候,我们只需要增加机器就行了,比如两台机器存放1.2T数据,那么没台机器存放就是600G,但是如果600G对于服务器的压力太大了,这个时候就需要增加第三台机器,让他们每人负责400G的数据,这个过程不需要人为的去分配,只需要将汲取加入集群中就自动完成。
swift一个超简单的例子告诉你究竟什么是类型抹除
...类型抹除”。在本篇博文中,一切都将彻底改变!我们将用最简单的一个示例告诉大家究竟什么是Swift中的“类型抹除”,并且顺带介绍了如何用Swift新的语言特性来简化“类型抹除”。比如,大家都熟悉SwiftUI中将一个特定View抹... 查看详情
swift一个超简单的例子告诉你究竟什么是类型抹除
...类型抹除”。在本篇博文中,一切都将彻底改变!我们将用最简单的一个示例告诉大家究竟什么是Swift中的“类型抹除”,并且顺带介绍了如何用Swift新的语言特性来简化“类型抹除”。比如,大家都熟悉SwiftUI中将一个特定View抹... 查看详情
我要取出map中所有的key或value,请用最简单、最准确的话概括,急!!!!!
for(Iteratorit=map.keySet();it.hasNext();)System.out.println(key+":"+it.next());System.out.println(value+":"+map.get(it.next()));哥一向这么狠,呵呵~~~~参考技术A我回家告诉你答案咯!!积分给我包你满意三句代码 查看详情
怎么花最少的钱用最多的流量?告诉你“保底+流量卡”才是王道.
...,那么,对于流量一族的用户来讲,怎么才能用最少的钱用最多的流量呢,接下来,我们一块来聊聊这个话题。 想要花最少的钱用最多的流量,这个时候你可以考虑一下“保底套餐+流量卡”,... 查看详情
七个生产案例告诉你batj为何选择elasticsearch!应用场景和优势!
从今天开始,想和你一起死磕ElasticSearch,学习分布式搜索引擎,跟着胖滚猪就对了!既然是ES的第一课,那么最重要的是让你爱上它!不想说那些单纯的优势、概念了,直接上大厂的生产案例,才是最能吸引你的!跟着大厂走,... 查看详情
什么是线性变换
...个向量的关系,一定是能用加法和乘法去简单描述的。就用最简单的一维情况描述的话,一个线性变换是4,那么经过这个变换后,2就会变成8,9会变成36,它的逆变换(/frac14)会将8变成2。如果一个变换是0,它会将所有都变成0。当... 查看详情
直截了当的告诉你什么是策略模式
策略模式的实现也是非常简单。还是那句话,直截了当,废话不多说。模拟一个计算运费的程序///<summary>///配送方式///</summary>publicenumShippingOptions{EMS=0,顺丰=1,圆通=2,中通=4,天天=8,宅急送=16}publicclassOrder{publicintId{get;set;}pub... 查看详情
一个故事告诉你什么才是好的程序员
...,我总是会听到有些人有这样的疑问,“只是做应用开发的话,还有没有必要学习诸如操作系统,编译原理这样的课程呢?”,亦或是会听到这样的话,“会用这个框架就行了,它底层是怎么实现的不用去管。”还记得我在大一... 查看详情
api是啥意思?有啥作用?请用最通俗比喻解释下,不要有术语
我是外行,连编程都不会,所以请不要用专业术语解释。我理解的api是不是就好比汽车上点烟器的插口?原来汽车(平台or系统)没有点烟(外部)功能,后来有人(第三方开发者)发明了点烟器(外部应用),但是要装在车上... 查看详情
专业人士告诉你数据分析的工作内容是什么?
...析师的工作内容不是很清楚,一般来说,数据分析工作说简单也简单,说难也难,具体总结起来就是5个问题。这五个问题就是数据分析工作的具体内容,那么这五个问题是什么呢?它包含以下方面:分析什么数据、什么时候分... 查看详情
es-什么是elasticsearch
前言观今宜鉴古,无古不成今。在学习elasticsearch之前,我们要知道,elasticsearch是什么?为什么要学习elasticsearch?以及用它能干什么?关于elasticsearch现在,你还离得开搜索吗?无论是Google还是百度提供的搜索入口,还是项目自... 查看详情
补码(为什么按位取反再加一):告诉你一个其实很简单的问题
首先,阅读这篇文章的你,肯定是一个在网上已经纠结了很久的读者,因为你查阅了所有你能查到的资料,然后他们都会很耐心的告诉你,补码:就是按位取反,然后加一。准确无误,毫无破绽。但是,你搜遍了所有俯拾即... 查看详情
什么是sql联合查询简单点告诉我
...体关联有外关联和关联两个概念,上面的例子只能给你很简单的,你上网多找点例子看,再自己多建几个表多打几遍,慢慢就找到规律了,不难祝你成功!参考技术A根据两张表里相同的字段,查询出相关联的数据 参考技术Bunion 查看详情
什么是多态?为什么要使用多态
用最简单的一句话就是:父类型的引用指向子类型的对象。用一句比较通俗的话:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。这句话很好理解:Personperson=newStudent("张三");但是这个多态有什么作用呢?而我... 查看详情
5分钟让你学会用最高效的工具解析所有json
如果你是一个Android开发工程师,学会解析Json字符串是你的必修课,本篇文章主要以实例的方式手把手教你怎么做,花五分钟时间阅读本篇文章你就可以学会解析所有的Json字符串啦。准备:json字符串fastjsonHiJson格式化json工具开... 查看详情
如何在一个字符串中找出一个电话号码javastring问题,请用最简单的方法
Stringstr="123456sajgj10086kk10000";str=str.replaceAll("^[0-9]+",";");Stringstr2[]=str.split(";");则str2[0]="123456",str2[1]="10086",str2[2]="10000"这样凡是成串的数字都分离出来放到数组中你可以再进行长度... 查看详情
elasticsearch怎么添加测试数据,2忆条数据的话,怎么添加比较快
参考技术A你只用elasticsearch还是用ELKstack(elasticsearch,logstash,kibana)?我用过ELKstack,用的logstash-forwarder把文件发送给logstash存在elasticsearch里。也许你想要的是类似elasticsearch-knapsack(https://github.com/jprante/elasticsearch-knapsack)的东西... 查看详情
tcp为什么需要三次握手?用最通俗的话解释给你听
TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解ok,首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议:1、什么是TCP... 查看详情