热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch知识总结-Elasticsearch介绍

本章将介绍以下内容-----------------------------------------
  1. Elasticsearch介绍

本章将介绍以下内容

---------------------------------------------------------------------------------------------------

  1. Elasticsearch的前世今生
  1. Elasticsearch是什么
  2. Elasticsearch的特性
  3. Elasticsearch的应用场景

欢迎各位读者阅读本章节!当我第一次接触到Elasticsearch的时候应该是在2013年,那时候的版本应该还只有0.9,我就被它优雅的语法、高可扩展性、高性能和易维护性等特点给深深的吸引住了,从此但开始了和Elasticsearch的亲密接触不解之缘。当时我在华为任搜索引擎技术顾问,负责构建华为内部所有文档的搜索引擎,使用的就是Elasticsearch,每日处理数TB的文档和超百万次的查询请求。

Elasticsearch的作者是Shay Banon,他在2010年发布了第一个版本0.4.0,而现在Elasticsearch已经发布了7.0.0的版本,全世界有数百万的开发者和公司都在使用Elasticsearch做数据搜索和数据分析。

根据db-engines的排名调查,Elasticsearch在搜索引擎的排名中稳居第一,远超其它搜索引擎的市场占有率:

Elasticsearch知识总结 - Elasticsearch介绍

注:此图来源于 https://db-engines.com/en/ranking/search+engine

在所有关系性和非关系性数据库的排名中,排名第8位:

Elasticsearch知识总结 - Elasticsearch介绍

注:此图来源于 https://db-engines.com/en/ranking

    1. Elasticsearch的前世今生

Elasticsearch的前身是Shay Banon希望为做为厨师的妻子,编写一个可以快速查找菜谱的应用程序,搜索的底层还是基于Lucene来实现的,不过Shay Banon发现基于Lucene本身来实现搜索功能,是一件非常繁琐的事情,需要做很多重复性的工作,并且用户需要花时间去学习Lucene的语法和使用方式。

于是Shay Banon就基于Lucene编写了一些高级的特性,使其使用起来更加简单,并且使用大家熟悉的Json做为查询语句,经过一段时间的修改和完善,第一个版本 Compass就诞生了,后续的第二个迭代版本更名为Elasticsearch,并将该版本开源给用户,用户对这个版本的反响十分强烈,用户量急剧上升,然后根据后续的发展,就有了今天的Elasticsearch。

    1. Elasticsearch是什么

Elasticsearch是一个底层基于Lucene库开发的分布式搜索引擎,它提供了一个在分布式环境下提供支持多用户搜索能力的全文搜索引擎,基于HTTP的RESTful接口,并使用JSON文档做为查询语句。Elasticsearch是用 Java 开发的,并作为Apache许可条款下的开放源码发布,是当前最受欢迎的企业搜索引擎之一。Elasticsearch目前官方和社区支持的客户端有20多种语言实现,如Java、.NET(C#)、 PHP 、 Python 、Apache Groovy、 Ruby 、 GO 等,完整的列表可以查看 这里 ,可以适于各种不同的开发场景。

    1. Elasticsearch的特性
      1. 面向文档

在真实的系统环境中,数据与数据之间往往都是存在着一定的关系的,数据的信息往往都是多维度的存在着,很少会存在着孤立的、简单的数据。拿我们人来举例,常常包括姓名、性别、出生年月、电话号码和家庭住址这些基本数据,也可能包括曾经就读过的不同学校,如小学、初中、高中、大学等,还可能包括一个人在不同的时间段所工作过的公司等信息。

如果我们是把这些对象的全部属性,都扁平化存储在关系型数据库的行和列中,把他们都放在一个表里面,这相当于是把一个表现力丰富的对象挤压到一个非常大的电子表格中,在后期实现查询功能的时候,又不得不在每次查询时重新构造对象。

而Elasticsearch是面向文档的,意味着它存储的是整个对象或文档,Elasticsearch不仅仅只是存储文档,而且索引每个文档的内容使之可以被用于被检索。在Elasticsearch中,我们是对文档进行索引、检索、 排序 和过滤,而不是对存储于关系性数据库的行列数据。这是一种完全不同的思考数据的方式,也是Elasticsearch 能支持复杂全文检索的原因。

      1. 全文检索

传统的数据库做搜索匹配,结果是要么匹配,要么不匹配,而做不到 部分匹配 的概念,这点是完全区别是传统数据库的一个概念。

如Elasticsearch的users索引库中存在以下两条记录:

{

"name":"Tom",

"hobby":"He likes go skating in the winter"

}

{

"name":"Jake",

"hobby":"He likes skating at home"

}

执行如下搜索语句:

GET /users/_search

{

"query" : {

"match" : {

"about" : "go skating"

}

}

}

搜索结果中包括了这两条记录,虽然只有第一条记录包括了“go skating”,但是第二记录包括了“skating”,实现了部分匹配。不过这里需要注意的是,虽然两条记录都查询出来了,但是他们的匹配权重是不一样的,匹配最多的会优先展示,这个会在后续的课程中讲到。

      1. 分布式

Elasticsearch是一个P2P协议(使用gossip协议)且天生就具有分布式特性的系统,除了集群状态管理以外,其他所有的请求都可以发送到集群内任意一台节点上,这个节点可以自己找到需要转发给哪些节点,并且直接跟这些节点通信。应用可根据本身的需求特点,最多可以将Elasticsearch横向扩展至数百(甚至数千)的服务器节点,且其同时可以处理PB级数据量的数据。由于Elasticsearch具有这些特性,因而它可服务于超大型公司,也可以运行于单机之上,服务于小微型公司。

Elasticsearch在分布式方面几乎是透明的,完全不需要用户的干预,当有新的节点增加或者有旧的节点被去掉,Elasticsearch会自动实现集群的扩展和收缩,自动实现数据的迁移的分布,并最终达到平衡。

      1. 数据分析

Elasticsearch通过内置的聚合函功能,通过该功能可以对数据做精细的分析,如对数据的分组(类似于 SQL 的Group by)、对数据进行求平均、筛选MAX或MIN数据等。

如_count是对当前索引库中所有数据的统计并返回总数结果:

GET /users/_count

{}

这个和SQL中的count函数类似,但是SQL中的count函数需要执行全表扫描才能够得到结果,而Elasticsearch中是直接获取到记录总数,速度上快很多,特别是在大数据量的情况下,差异会更加明显。

Elasticsearch的数据分析功能,再结果Kibana的展现功能,就可以组合出非常直观的报表,如下所示示例截图:

Elasticsearch知识总结 - Elasticsearch介绍

    1. Elasticsearch的架构

Elasticsearch知识总结 - Elasticsearch介绍

这是一个具有3个Elasticsearch节点的集群,每个索引具有2个分片和2个副本,可以看出数据是相对均匀的分散到各个节点上,这种架构天然具有良好的扩展性和容灾性。应用程序调用Elasticsearch执行查询操作时,每个节点都应该用做请求入口,如使用轮询的方式,Elasticsearch优先会从本身节点获取数据,获取不到的分片数据再通过其它的节点获取,这样可以将查询请求压力分散到各个节点。

    1. Elasticsearch的应用场景

Elasticsearch的主要功能是用于数据搜索以及数据分析,操作非常方便,使用的是易于理解的Json做为查询语句,并且有着丰富的客户端和社区支持。因而只要是涉及到数据搜索和数据分析的场景,Elasticsearch都可以大显伸手,以下是举例的一些应用场景。

电影网站

可以让用户通过搜索方便的找到自己需要的电影

电商网站

用户通过搜索,可以方便到找到自己商品

社交网站

提供给用户查找好友的功能,增加用户粘性

新闻网站数据分析

给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)

大型源码管理

提供代码搜索功能

日志数据分析

通过ELK(Elasticsearch+Logstash+Kibana)提供方便的日志收集功能和直接日志分析展示结果

这里只是例举了部分示例,同时也说明了Elasticsearch广阔的应用场景。

后续的章节会讲Elasticsearch的安装,包括的内容:

单节点的安装、多节点的安装、安装Head插件、安装Kibana、通过 Docker 安装等内容


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
author-avatar
mobiledu2502856973
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有