版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。

接触ElasticSearch一段时间了,前期调研、项目接入、数据同步、列表查询这些阶段都已经经历了,但是ES在脑海中的整体映像还是模模糊糊,做个梳理,认真地思考一下ElasticSearch中模糊的思维。

前提:

如图,是从github上学习到了,宏观总结阶段的流程化思考,很科学的学习习惯,我按照这个思路来总结下目前阶段我理解到的ElasticSearch.

它是什么

1.术语定义

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
      官网:https://www.elastic.co/products/elasticsearch 
      百度百科:https://baike.baidu.com/item/elasticsearch/3411206?fr=aladdin

2.它的历史
      出现原因:https://www.jianshu.com/p/3d43616999d9 (一个做菜谱的故事)
      历史版本:https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html(每个版本节点,做了哪些事情,有助于排解使用中的问题)
        
3.构架

如图所示,是ES的整体架构,从下往上说:
      1.Gateway是es用于存储索引的文件系统,支持多种文件类型,如图所示。
      2.Gateway往上就是分布式的Lucene框架,ES底层的API是由这一层提供的,每个节点都有一个Lucene引擎的支持。
      3.Lucene往上是Elasticsearch的模块,包括索引模块、搜索模块、映射解析模块等。River相当于第三方插件,用来导入第三方数据源,在2.x之后不再使用。
      4.ES模块之上是Discovery、Scripting和第三方插件。Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要消息通信,集群内部选主master都是通过Discovery来做。Scripting用来支持JavaScript、Python等多语言,可以在查询语句中嵌入。
      5.再往上是传输模块和JMX。传输模块支持Thrift、Memcached、HTTP,默认HTTP传输。JMX是java的管理框架。
      6.再往上是ES提供给用户的接口,通过RESTful API和ES集群进行交互。

4.核心概念
      1.集群
      代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

2.节点
      一个节点是集群中的一个服务器,对于节点,最好采用被动加入的方式,不然容易产生“脑裂”现象。

3.索引4.类型 5.文档

这三个概念,参考与关系型DB的对比:

6.分片
      es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

7.副本
      es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

4.应用场景
     1.站内搜索
     用在网页信息量很大的网站,百度、github、stackoverflow,全文检索的功能,方便用户快速检索数据信息。
     2.NoSQL数据库
     Elasticsearch读写性能优于MongoDB,支持地理位置查询。
     3.日志分析
     日志分析由实时日志分析平台ELK(Elasticsearch、Logstash、Kiabana)完成,能够对日志进行集中的收集、存储、搜索、分析、监控以及可视化。

5.同类常见技术
      Solr(全文搜索)对比es: https://blog.csdn.net/vv8086/article/details/74452178 
      Splunk(全文搜索、大数据搜索) 对比es:https://blog.csdn.net/github_39335046/article/details/73835390

从趋势上可见,近几年ES的排名也是越来靠前。

学习前提、依赖
       RESTful API的使用
       JSON数据结构的了解。

为什么会出现
     1.分布式
     2.全文检索
     3.近实时搜索和分析
     4.高可用
     5.模式自有
     6.RESTful API
     从这几个角度看,这似乎是es的优点,随着现在互联网项目的数据量越来越大,这恰恰是为什么es能越来越火的原因啊。

缺陷
      换了好几个负面的关键词去搜索,抛开技术实现,从选型的角度,相比较solr,没有什么缺陷。像“深度分页”这种的,完全可以在使用的时候避免,官网给了很好的解决方案:Scroll以及from/size等方法。

归纳整理并分享
      1.官网的Getting Started绝对是最快、最好的学习方式;
      2.安装时候,通过HEAD插件,或者googl浏览器的sense插件,自己敲一敲,多动手;

elasticsearch辅助:
      1.head插件
      2.Kiabana

脑图总结

1.概述;2.应用;3.原理;4.QA

 

ElasticSearch 初识ES的更多相关文章

  1. 初识es

    初识es es是什么? es是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性. es除了全文搜索引擎之外,还可以这样描述它: ...

  2. [数据库]漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)

    ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人 ...

  3. C# 如何使用 Elasticsearch (ES)

    Elasticsearch简介 Elasticsearch (ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好 ...

  4. elasticsearch(ES)日志迁移

    =============================================== 2018/7/29_第1次修改                       ccb_warlock == ...

  5. 漫谈ElasticSearch关于ES性能调优几件必须知道的事

    lasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人惊 ...

  6. elastic search book [ ElasticSearch book es book]

    谁在使用ELK 维基百科, github都使用 ELK (ElasticSearch es book) ElasticSearch入门 Elasticsearch入门,这一篇就够了==>http ...

  7. 01-springboot整合elasticsearch初识

    1.elasticsearch 1.es简介      Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elas ...

  8. 简单操作elasticsearch(es版本7.6)

    简单操作elasticsearch(es版本7.6) es 官方文档 https://www.elastic.co/guide/index.html 简单操作elasticsearch主要是指管理索引 ...

  9. 手把手教你Spring Boot2.x整合Elasticsearch(ES)

    文末会附上完整的代码包供大家下载参考,码字不易,如果对你有帮助请给个点赞和关注,谢谢! 如果只是想看java对于Elasticsearch的操作可以直接看第四大点 一.docker部署Elastics ...

随机推荐

  1. 08-Maps

    Maps map 是在 Go 中将值(value)与键(key)关联的内置类型.通过相应的键可以获取到值.Maps类似于python中的字典 Maps定义 maps的key值必须是可hash(就是不可 ...

  2. C++类的组合、前向引用声明

    3.5类的组合 Part1.应用背景 对于复杂的问题,往往可以逐步划分为一系列稍微简单的子问题. 解决复杂问题的有效方法是将其层层分解为简单的问题组合,首先解决简单问题复杂问题也就迎刃而解了. 在面向 ...

  3. 小程序day1-day3随笔

    0==小程序的结构和组件 1==小程序常用组件:text文本属性 3==小程序UI组件view的属性hover 鼠标点击出现的效果hover 4==小程序ui组件button按钮组件的属性 5==小程 ...

  4. MGR并行复制从节点复制线程死锁

    1.故障现象 20191113-22:32 datax全量同步t_shop_info表到 eorder所在的实例,t_shop_info表有两个唯一约束.总数据量不超过1w行,同步完成后MGR从库复制 ...

  5. SharePoint中用Power shell命令设置文档库列表的权限

    首先停止继承权限 $web = Get-PnPweb $spoList= Get-PnPList "Testlist" -Web $web (注释:获取对象)$spoList.Br ...

  6. React Native 开发豆瓣评分(三)集成 Redux

    什么是 redux redux 是一个用于管理 js 应用状态(state)的容器.比如组件 A 发生了变化,组件 B 要同时做出响应.常见的应用场景就是用户的登录退出操作:未登录状态,个人中心显示登 ...

  7. golang实现路由中间件middleware

    registerHandlers.go package router import ( "../ctrl" "../funcs" "github.co ...

  8. https和证书小结

    https://www.cnblogs.com/andy9468/p/10484598.html https://www.cnblogs.com/andy9468/p/10414371.html ht ...

  9. Java 进阶面试问题必备

    面向对象编程的基本理念与核心设计思想 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling). 继承(Inheritanc ...

  10. ScheduledExecutorService周期性的定时任务

    从j2se的api文档上查看ScheduledExecutorService的方法都是推迟一段时间然后相隔一段时间之后再去执行,没有想Timer定时器一样的可以在定点时间执行的api,如果也想像Tim ...