大数据开发经常用到 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 负责搜索数据。

  1. 传统数据库在全文检索方面很鸡肋,海量数据下的查询很慢,对非结构化文本数据的不支持,ES 支持非结构化数据的存储和查询。
  2. ES 支持分布式文档存储。
  3. ES 是分布式实时搜索,并且响应时间比关系型数据库快。
  4. ES 在分词方面比关系型好,能做到精确分词。
  5. ES 对已有的数据,在数据匹配性方面比关系型数据库好, 例如:搜索“星巴克咖啡”,ES会优先返回带有“星巴克咖啡”的数据,不会优先返回带有“咖啡”的数据。

【ES】Elasticsearch 简介相关推荐

  1. elasticsearch 客户端工具_1分钟系列-Elasticsearch 简介与单机版安装

    Elasticsearch 简介 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticsearch 在 A ...

  2. ElasticSearch简介及ElasticSearch部署、原理和使用介绍

    ElasticSearch简介及ElasticSearch部署.原理和使用介绍 第一章:elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式 ...

  3. 01- ElasticSearch(简称ES)- 简介

    ElasticSearch简介 Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎. 能够达到实时搜索,稳定,可靠,快速,安装使用方便. 客户端支持Java..NET(C ...

  4. 1、Elasticsearch简介与安装使用

    一.Elastic Stack 是什么 Elastic Stack 是 ELK Stack 的更新换代产品,通过访问官网,可以看到 Elastic 产品的生态分布情况,如图所示: "ELK& ...

  5. 全文搜索引擎 Elasticsearch 简介 及其与 Python 的对接实现

    什么是 Elasticsearch 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说,肯 ...

  6. Elasticsearch 简介

    Elasticsearch 是一款稳定高效的分布式搜索和分析引擎,它的底层基于 Lucene,并提供了友好的 RESTful API 来对数据进行操作,还有比较重要的一点是, Elasticsearc ...

  7. 【Elasticsearch】ES Elasticsearch查询优化

    文章目录 1.概述 1.前言 2 合理的集群规划 3 数据模型优化 3.1 精心设计Mapping 3.2 选择合理的分词器 4 查询限制 5 段合并(segment merge) 6 过滤查询(fi ...

  8. ES (ElasticSearch) 简易解读(一)为什么用它

    首先和数据库做对比 RDBS ES 数据库(database) 索引(index) 表结构(schema) 类型(type) 行(row) 文档(document)) 列(column) 字段(fie ...

  9. 《深入理解Elasticsearch(原书第2版)》——第1章  Elasticsearch简介

    2019独角兽企业重金招聘Python工程师标准>>> 第1章  Elasticsearch简介 摘要: 欢迎来到Elasticsearch的世界并阅读本书第2版.通过阅读本书,我们 ...

最新文章

  1. SilverlightCMS开发之3经典三页面CMS浮现
  2. vc如何打开plt图像_图像基本操作-open cv
  3. 共享美食:煲仔饭、香蕉粥和胡萝卜饼
  4. python是什么意思中文、好学吗-学习python难吗?是不是越低级的程序越难学,越高级的程序越简单?...
  5. Perl 学习笔记-输入输出
  6. 【自用】Android 切割Bitmap为多个小的Bitmap
  7. maven 阿里云仓库
  8. baacloud苹果_baacloud官网下载
  9. 通过mac电脑将macos系统的dmg镜像转换为iso文件,供VMware安装mac系统
  10. 机器学习之初识SVM
  11. nginx tcp端口转发_使用Nginx进行TCP/UDP端口转发
  12. elasticsearch 7.4 常用查询/搜索方式
  13. 怎么把pdf分开?pdf文件拆分为单个pdf怎么拆分?
  14. 基于java的网络聊天室
  15. 三星s8自带测试硬件软件,屏幕素质测试 三星S8表现较好_手机评测-中关村在线...
  16. 提高工作效率必备的生产力工具
  17. 小猿日记 - 程序猿的日常日记(3)
  18. 谈下最近做的一个手机app,学习到的东西挺多的哦
  19. 七夕情人节送女朋友什么礼物?七夕情人节礼物推荐
  20. 【ROS-Navigation】—— Astar路径规划算法解析

热门文章

  1. HapMap-人类基因组单倍型图谱
  2. SpringBoot四大核心
  3. 安卓基础学习 Day 6|常用控件---列表视图+古诗查看
  4. 如何让c语言编的游戏运行,如何用C语言编写游戏一.doc
  5. 2020-04-19-E-prime2.0.10安装过程
  6. 去掉数组中重复出现元素的算法
  7. python网络爬虫(第八章:图像识别与文字处理)
  8. Ubuntu22.04安装gcc-5和g++-5
  9. IOS在Windows自动化测试之tidevice
  10. html5字体动画效果,7款超华丽的HTML5 Canvas文字动画特效