【ES】Elasticsearch 简介
大数据开发经常用到 Elasticesearch,今天做一下介绍。
1.Elasticsearch 简介
Elaticsearch,简称为 ES, 是一个开源的高扩展的分布式全文检索引擎,特点:
- 近乎实时的存储、检索数据;
- 扩展性好,可以扩展到上百台服务器,处理PB级别的数据;
- 使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能;
- 通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
2.全文索引
2.1 什么是全文索引
对于非结构化数据查询方法:
- 顺序扫描法:要找内容包含某一个字符串的文件,就逐个文档查询,对于每一个文档,从头查到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。
- 全文检索:将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息称之为索引。
这种先建立索引,再对索引进行搜索的过程就叫全文检索。
2.2 如何实现
可以使用 Lucene 实现全文检索。Lucene 是 apache 下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。
2.3 应用场景
对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,例如搜索引擎。
2.4 实现
文件→字符串:非结构化数据中所存储的信息是每个文件包含哪些字符串,也即已知文件,欲求字符串相对容易,也即是从文件到字符串的映射。
字符串→文件:我们想搜索的信息是哪些文件包含此字符串,也即已知字符串,欲求文件,也即从字符串到文件的映射。
因此,索引需要保存从字符串到文件的映射,则会大大提高搜索速度。
采用倒排索引的方法:
正排索引:
文档编号 | 文档内容 |
---|---|
1 | 上海的鲜花 |
2 | 上海的公园 |
3 | 公园的鲜花绽放 |
倒排索引:
单词ID | 单词 | 倒排列表 |
---|---|---|
1 | 上海 | 1,2 |
2 | 鲜花 | 1,3 |
3 | 公园 | 2,3 |
4 | 绽放 | 3 |
5 | 的 | 1,2,3 |
- 比如单词“上海”,其单词编号为1,倒排列表为{1,2},说明文档集合中1、2文档都包含了这个单词。
3.Elasticsearch 与 MySQL 的区别
3.1 分词
MySQL:
背景:在做中文搜索时,组合词检索在数据库是很难完成的。
例如:当用户在搜索框输入“四川火锅”时,数据库通常只能把这四个字去进行全部匹配。可是在文本中,可能会出现“推荐四川好吃的火锅”,这时候就没有结果了。
Elasticsearch:
提升:使用ES搜索服务后,就不用太过于关注分词了,因为 Elasticsearch 支持中文分词插件,很好地解决了问题。
原因:当用户使用 Elasticsearch 时进行搜索时,Elasticsearch 就自动帮他分好词了。
例如:输入“四川火锅”时,Elasticsearch 会自动做下面两件事:
- 将“四川火锅”分词成“四川”和“火锅”
- 查找包含这两个词的文档
3.2 响应时间
MySQL:
背景:当数据库中的文档数仅仅上万条时,关键词查询就比较慢了。如果一旦到企业级的数据,响应速度就会更加不可接受。
原因:在数据库做模糊查询时,如 LIKE 语句,它会遍历整张表,同时进行字符串匹配。
例如,在数据库查询“手机”时,数据库会在每一条记录去匹配“手机”这两字是否出现。实际上,并不是所有记录都包含“手机”,所以做了很多无用功。
这个步骤都不高效,而且随着数据量的增大,消耗的资源和时间都会线性的增长。
Elasticsearch:
提升:TB 级数据在毫秒级就能返回检索结果,很好地解决了痛点。
原因:Elasticsearch 是基于倒排索引。
例如:搜索“手机”,ES 已经提前分词了,直接去查对应文档。
3.3 相关性
MySQL:
背景:在用数据库做搜索时,结果经常会出现一系列不匹配的文档。
原因:数据库并不支持相关性搜索。
例如,当用户搜索“咖啡厅”的时候,他很可能更想知道附近哪里可以喝咖啡,而不是怎么开咖啡厅。
Elasticsearch:
提升:使用了 ES 搜索服务后,发现 Elasticsearch 能很好地支持相关性评分。通过合理的优化,ES 搜索服务能够返回精准的结果,满足用户的需求。
原因:Elasticsearch 支持全文搜索和相关度评分。这样在返回结果就会根据分数由高到低排列。分数越高,意味着和查询语句越相关。
例如,当用户搜索“星巴克咖啡”,带有“星巴克咖啡”的信息就要比只包含“咖啡”的信息靠前。
3.4 总结
Elasticsearch 和 MySql 分工不同,MySQL 负责存储数据,Elasticsearch 负责搜索数据。
- 传统数据库在全文检索方面很鸡肋,海量数据下的查询很慢,对非结构化文本数据的不支持,ES 支持非结构化数据的存储和查询。
- ES 支持分布式文档存储。
- ES 是分布式实时搜索,并且响应时间比关系型数据库快。
- ES 在分词方面比关系型好,能做到精确分词。
- ES 对已有的数据,在数据匹配性方面比关系型数据库好, 例如:搜索“星巴克咖啡”,ES会优先返回带有“星巴克咖啡”的数据,不会优先返回带有“咖啡”的数据。
【ES】Elasticsearch 简介相关推荐
- elasticsearch 客户端工具_1分钟系列-Elasticsearch 简介与单机版安装
Elasticsearch 简介 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticsearch 在 A ...
- ElasticSearch简介及ElasticSearch部署、原理和使用介绍
ElasticSearch简介及ElasticSearch部署.原理和使用介绍 第一章:elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式 ...
- 01- ElasticSearch(简称ES)- 简介
ElasticSearch简介 Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎. 能够达到实时搜索,稳定,可靠,快速,安装使用方便. 客户端支持Java..NET(C ...
- 1、Elasticsearch简介与安装使用
一.Elastic Stack 是什么 Elastic Stack 是 ELK Stack 的更新换代产品,通过访问官网,可以看到 Elastic 产品的生态分布情况,如图所示: "ELK& ...
- 全文搜索引擎 Elasticsearch 简介 及其与 Python 的对接实现
什么是 Elasticsearch 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说,肯 ...
- Elasticsearch 简介
Elasticsearch 是一款稳定高效的分布式搜索和分析引擎,它的底层基于 Lucene,并提供了友好的 RESTful API 来对数据进行操作,还有比较重要的一点是, Elasticsearc ...
- 【Elasticsearch】ES Elasticsearch查询优化
文章目录 1.概述 1.前言 2 合理的集群规划 3 数据模型优化 3.1 精心设计Mapping 3.2 选择合理的分词器 4 查询限制 5 段合并(segment merge) 6 过滤查询(fi ...
- ES (ElasticSearch) 简易解读(一)为什么用它
首先和数据库做对比 RDBS ES 数据库(database) 索引(index) 表结构(schema) 类型(type) 行(row) 文档(document)) 列(column) 字段(fie ...
- 《深入理解Elasticsearch(原书第2版)》——第1章 Elasticsearch简介
2019独角兽企业重金招聘Python工程师标准>>> 第1章 Elasticsearch简介 摘要: 欢迎来到Elasticsearch的世界并阅读本书第2版.通过阅读本书,我们 ...
最新文章
- SilverlightCMS开发之3经典三页面CMS浮现
- vc如何打开plt图像_图像基本操作-open cv
- 共享美食:煲仔饭、香蕉粥和胡萝卜饼
- python是什么意思中文、好学吗-学习python难吗?是不是越低级的程序越难学,越高级的程序越简单?...
- Perl 学习笔记-输入输出
- 【自用】Android 切割Bitmap为多个小的Bitmap
- maven 阿里云仓库
- baacloud苹果_baacloud官网下载
- 通过mac电脑将macos系统的dmg镜像转换为iso文件,供VMware安装mac系统
- 机器学习之初识SVM
- nginx tcp端口转发_使用Nginx进行TCP/UDP端口转发
- elasticsearch 7.4 常用查询/搜索方式
- 怎么把pdf分开?pdf文件拆分为单个pdf怎么拆分?
- 基于java的网络聊天室
- 三星s8自带测试硬件软件,屏幕素质测试 三星S8表现较好_手机评测-中关村在线...
- 提高工作效率必备的生产力工具
- 小猿日记 - 程序猿的日常日记(3)
- 谈下最近做的一个手机app,学习到的东西挺多的哦
- 七夕情人节送女朋友什么礼物?七夕情人节礼物推荐
- 【ROS-Navigation】—— Astar路径规划算法解析
热门文章
- HapMap-人类基因组单倍型图谱
- SpringBoot四大核心
- 安卓基础学习 Day 6|常用控件---列表视图+古诗查看
- 如何让c语言编的游戏运行,如何用C语言编写游戏一.doc
- 2020-04-19-E-prime2.0.10安装过程
- 去掉数组中重复出现元素的算法
- python网络爬虫(第八章:图像识别与文字处理)
- Ubuntu22.04安装gcc-5和g++-5
- IOS在Windows自动化测试之tidevice
- html5字体动画效果,7款超华丽的HTML5 Canvas文字动画特效