什么是 Elasticsearch?一篇搞懂
请访问原文:https://mp.weixin.qq.com/s/xYN3qGzKGq3agzNhS3H-6g
以下文章来源于Java3y ,作者Java3y
Java3y
一个坚持原创的Java技术公众号
前言
不知道大家的公司用Elasticsearch多不多,反正我公司的是有在用的。平时听同事们聊天肯定避免不了不认识的技术栈,例如说:把数据放在引擎,从引擎取出数据等等。
如果对引擎不了解的同学,就压根听不懂他们在说什么(我就是听不懂的一位,扎心了)。引擎一般指的是搜索引擎,现在用得比较多的就是Elasticsearch。
这篇文章主要是对Elasticsearch一个简单的入门,没有高深的知识和使用。至少我想做到的是:以后同事们聊引擎了,至少知道他们在讲什么。
什么是Elasticsearch?
Elasticsearch is a real-time, distributed storage, search, and analytics engine
Elasticsearch 是一个实时的分布式存储、搜索、分析的引擎。
介绍那儿有几个关键字:
实时
分布式
搜索
分析
于是我们就得知道Elasticsearch是怎么做到实时的,Elasticsearch的架构是怎么样的(分布式)。存储、搜索和分析(得知道Elasticsearch是怎么存储、搜索和分析的)
这些问题在这篇文章中都会有提及。
我已经写了200多篇原创技术文章了,后续会写大数据相关的文章,如果想看我其他文章的同学,不妨关注我吧。公众号:Java3y
如果觉得我这篇文章还不错,对你有帮助,不要吝啬自己的赞!
为什么要用Elasticsearch
在学习一项技术之前,必须先要了解为什么要使用这项技术。所以,为什么要使用Elasticsearch呢?我们在日常开发中,数据库也能做到(实时、存储、搜索、分析)。
相对于数据库,Elasticsearch的强大之处就是可以模糊查询。
有的同学可能就会说:我数据库怎么就不能模糊查询了??我反手就给你写一个SQL:
select * from user where name like '%公众号Java3y%'
这不就可以把公众号Java3y相关的内容搜索出来了吗?
的确,这样做的确可以。但是要明白的是:name like %Java3y%
这类的查询是不走索引的,不走索引意味着:只要你的数据库的量很大(1亿条),你的查询肯定会是秒级别的
如果对数据库索引还不是很了解的同学,建议复看一下我以前的文章。我觉得我当时写得还不赖(哈哈哈)
GitHub搜关键字:”索引“
而且,即便给你从数据库根据模糊匹配查出相应的记录了,那往往会返回大量的数据给你,往往你需要的数据量并没有这么多,可能50条记录就足够了。
还有一个就是:用户输入的内容往往并没有这么的精确,比如我从Google输入ElastcSeach
(打错字),但是Google还是能估算我想输入的是Elasticsearch
而Elasticsearch是专门做搜索的,就是为了解决上面所讲的问题而生的,换句话说:
Elasticsearch对模糊搜索非常擅长(搜索速度很快)
从Elasticsearch搜索到的数据可以根据评分过滤掉大部分的,只要返回评分高的给用户就好了(原生就支持排序)
没有那么准确的关键字也能搜出相关的结果(能匹配有相关性的记录)
下面我们就来学学为什么Elasticsearch可以做到上面的几点。
Elasticsearch的数据结构
众所周知,你要在查询的时候花得更少的时间,你就需要知道他的底层数据结构是怎么样的;举个例子:
树型的查找时间复杂度一般是O(logn)
链表的查找时间复杂度一般是O(n)
哈希表的查找时间复杂度一般是O(1)
….不同的数据结构所花的时间往往不一样,你想要查找的时候要快,就需要有底层的数据结构支持
从上面说Elasticsearch的模糊查询速度很快,那Elasticsearch的底层数据结构是什么呢?我们来看看。
我们根据“完整的条件”查找一条记录叫做正向索引;我们一本书的章节目录就是正向索引,通过章节名称就找到对应的页码。
首先我们得知道为什么Elasticsearch为什么可以实现快速的“模糊匹配”/“相关性查询”,实际上是你写入数据到Elasticsearch的时候会进行分词。
还是以上图为例,上图出现了4次“算法”这个词,我们能不能根据这次词为它找他对应的目录?Elasticsearch正是这样干的,如果我们根据上图来做这个事,会得到类似这样的结果:
算法
->
2,13,42,56
这代表着“算法”这个词肯定是在第二页、第十三页、第四十二页、第五十六页出现过。这种根据某个词(不完整的条件)再查找对应记录,叫做倒排索引。
再看下面的图,好好体会一下:
众所周知,世界上有这么多的语言,那Elasticsearch怎么切分这些词呢?,Elasticsearch内置了一些分词器
Standard Analyzer 。按词切分,将词小写
Simple Analyzer。按非字母过滤(符号被过滤掉),将词小写
WhitespaceAnalyzer。按照空格切分,不转小写
….等等等
Elasticsearch分词器主要由三部分组成:
什么是 Elasticsearch?一篇搞懂相关推荐
- python 类-Python入门--一篇搞懂什么是类
原标题:Python入门--一篇搞懂什么是类 写一篇Python类的入门文章,在高级编程语言中,明白类的概念和懂得如何运用是必不可少的.文章有点长,3000多字. Python是面向对象的高级编程语言 ...
- 一篇搞懂OOA/OOD/OOP的区别
文章目录 OOA OOD OOP 总结 相关文章: 一篇搞懂OOA/OOD/OOP的区别 面向对象的基本原则-抽象,封装,继承,分解 GRASP模式概述 面向对象的六大原则 OOA什么鬼,OOD又是什 ...
- C++ 一篇搞懂多态的实现原理
C++ 一篇搞懂多态的实现原理 虚函数和多态 01 虚函数 在类的定义中,前面有 virtual 关键字的成员函数称为虚函数: virtual 关键字只用在类定义里的函数声明中,写函数体时不用. cl ...
- 一篇搞懂微信小程序以及和其他对比
一篇搞懂微信小程序以及和其他对比** 前两年的文章了,现在小程序肯定是有变化的,作为自己的随记 一.产品定位及功能分析** 微信小程序是一种全新的连接用户与服务的方式,他可以在微信内被便捷的获取和传播 ...
- 一篇搞懂关于计算机的减法运算
一篇搞懂关于计算机的减法运算 减法 相减结果为正的减法 相减结果为负数的减法 减法 相减结果为正的减法 如下一篇拙言,是自己平时的总结,如有错误欢迎各位大佬指正. 相信你一定听说过,补码,取反加一等等 ...
- tcp 二次握手时延_一篇搞懂TCP的三次握手 四次挥手
TCP的三次握手四次挥手,估计大家都听过.但是真的能把每一步说明白的人比较少.我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞 ...
- 基于IIC通信的显示器OLED编程详解(一篇搞懂)
前言: 上一篇博客介绍了IIC通信,这篇我们就来玩玩oled模块.当然选用的是IIC接口,因为市面上还有一种是SPI接口的.对于oled长啥样,采用了什么材料,工艺怎么怎么样等等这里就不作任何介绍,搞 ...
- python文件打开模式rb表示只读模式打开文件_一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)...
关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.各模式逐个分解 'r':只读. ...
- 2.5w字长文爆肝 C++动态内存与智能指针一篇搞懂!太顶了!!!
动态内存与智能指针 1.动态内存与智能指针 2.shared_ptr类 2.1.make_shared函数 2.2.shared_ptr的拷贝和赋值 2.3.shared_ptr自动销毁所管理的对象 ...
- 数据结构杂谈番外篇——搞懂递归的小文章
文章目录 1 难题 2 递归 2.1 n的阶层 2.2 斐波那契数列的第n项 2.3 逆序打印数组 3 反转链表 4 回顾递归 1 难题 如果不想听我谈学习的过程而注重怎么学习,可以直接跳到第二小节 ...
最新文章
- 【神经网络】(6) 卷积神经网络(VGG16),案例:鸟类图片4分类
- 何时使用自定义HTTP 方法
- requests库和BeautifulSoup4库爬取新闻列表
- 江行智能CTO樊小毅:AI+边缘计算驱动能源产业变革 | 量子位·视点分享回顾
- 内核模式下的字符串操作
- 全国计算机网络自学考试,2008年1月全国自考“计算机网络基本原理”试题
- boost::gil::ColorBaseConcept用法的测试程序
- 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
- python案例实操_用案例实操学习Python ,培养编程逻辑思维
- levelshifter工作原理_从滑块问题看Level Shifter中Latch的状态转换
- java easyui 分页_Spring mvc+easyui做列表展示及分页
- 在64位机器上无法调用迅雷的问题
- CodeForces 274B Zero Tree :每次选包含1节点的一棵子树,将该子树所有值都+1或者-1最少多少步可以使树值全部为0 :树型dp...
- 单片机启动流程(以STM32为例)
- matlab中input输入多个数_python怎么一次输入两个数
- linux 反汇编 静态库,如何反汇编.lib静态库?
- 预览psd文件的看图器_消防安全防火知识手抄报,涂色线稿多彩设计,word自带PSD排版...
- uni-app获取微信openid及其他信息
- 【程序员的自我修养】[动态图文] 超详解函数栈帧
- 2600评测_佳能专微的雄心,RF 28-70/2 L USM评测
热门文章
- python 类-Python入门--一篇搞懂什么是类