用最简单的话告诉你什么是ElasticSearch
介绍
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的数据,这个过程不需要人为的去分配,只需要将汲取加入集群中就自动完成。
用最简单的话告诉你什么是ElasticSearch的更多相关文章
- Kibana安装及简单使用
Kibana安装 参照官方文档即可,这里只做相关操作记录: wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-linux- ...
- 简单使用packetbeat
简单使用packetbeat 标签:packetbeat elasticsearch 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面两篇文章中记录了使用logstash来收集mysql的慢 ...
- Elasticsearch简单使用和环境搭建
Elasticsearch简单使用和环境搭建 1 Elasticsearch简介 Elasticsearch是一个可用于构建搜索应用的成品软件,它最早由Shay Bannon创建并于2010年2月发布 ...
- ElasticSearch - ElasticSearch和kinaba的简单使用
ElasticSearch和kinaba的简单使用 ElasticSeatch 文档推荐 ElasticSearch 下载 (端口 9200) 安装好es,可以访问 http://localhost: ...
- Server.Transfer 和 Response.Redirect 用法区别
在ASP.NET中,在后台传值方式目前大多都是用 Response.Redirect("页面地址") 来重定向页面的,但是现在还有一种方式也可以达到重定向页面的作用,而且在某些时刻 ...
- 能力素质模型咨询工具(Part 2)
核心能力素质模型数据库 1. 工作态度 通用 (1)热爱本职工作,对工作充满信心 (2)在没有明确的规定或领导指示的情况下,能够积极主动地承担职责范围内的各项工作,并能够积极地配合其他同事/部门工作 ...
- [小菜随笔]关于monkey报错日志分析
今天小菜在一个测试群内看到群友发出一个monkey的报错信息,其实是一个很简单的报错 个人觉得monkey虽然操作起来比较简易,但其实查看日志分析日志也是很重要的环节,如果对错误分析不够详细,就容易误 ...
- composer.json:项目安装!!!!!!!!!!
基本用法 基本用法 安装 composer.json:项目安装 关于 require Key 包名称 包版本 下一个重要版本(波浪号运算符) 稳定性 安装依赖包 composer.lock - 锁文件 ...
- IOS UIView 01-View开始深入 绘制像素到屏幕上
注:本人是翻译过来,并且加上本人的一点见解. 前言 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发 ...
随机推荐
- python 对 sqlite3的简单使用
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成.Python就内 ...
- linux下jvm优化、tomcat调优
系统环境:jdk1.8,apache-tomcat-8.5.35 一.jvm优化 进入 bin/catalina.sh,修改JAVA_OPTS配置: JAVA_OPTS="-server - ...
- ionic3/4 使用NavController 返回两层的方式
ionic3/4 使用NavController 返回两层的方式: this.navCtrl.popTo(this.navCtrl.length() - 3);
- 2019微软Power BI 每月功能更新系列——3月Power BI 新功能学习
Power BI3月产品功能更新发布啦!本次新功能新增了热图和单选切片器:完善了新的DAX功能和对现有功能的改进(例如按钮和选择窗格):同时官方表示建模视图的全面改进也正在进行中~Woo~那么,本月更 ...
- java后台常见问题
Java后台面试 常见问题 Nginx负载均衡 轮询.轮询是默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,则能自动剔除 ip_hash.个请求按访问IP的hash结果 ...
- ros 使用笔记
1. publishers/subscribers 常用指令 说明rosnode list 查看所有激活的节点rostopic list 查看所有激活的topicrostopic i ...
- [转]JAVA 根据经纬度算出附近的正方形的四个角的经纬度
csv文件转化为geojson文件中,涉及到路测图的打点生成,打点是由一个个正方形组成,而正方形是由四个点组成的,这四个点根据经纬度和范围生成,具体的实现代码是从网上找来的: /** * * @par ...
- MySQL查询操作——2
-----------查询操作--------------------------- 查询表中的所有字段SELECT * FROM employees; 查询常量值SELECT 100;SELECT ...
- DataTables中自增序号的实现
最近工作中,一直在写前端的东西,一直以来前端都接触的少,所以侧重点也没放在这边,导致现在工作进展比较慢,果然偷懒是要不得的啊.... 今天刚写了一个在DataTables中增加一列自增序号,刚开始以为 ...
- 作业一 :关于C语言
C语言是计算机专业的基础课,同时也是计算机专业的第一个入门语言,学好C语言母庸质疑.就目前来看,在C语言中已经学习的内容有:基本运算符及表达式.输入输出函数.选择 结构程序设计.循环结构程序设计.数组 ...