版权声明:本文为博主原创文章,遵循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. python实战项目 — selenium登陆豆瓣

    利用selenium 模仿浏览器,登陆豆瓣 重点: 1. 要设置好 chromedriver配置与使用, chromedriver.exe 和 Chrome的浏览器版本要对应, http://chro ...

  2. linux中用户环境变量问题

    修改所有用户的环境变量:/etc/profile文件 只修改root用户的环境变量:~/.bashrc文件 只修改某个非root用户的环境变量:/home/非root用户名/.bashrc文件

  3. JavaScript进行WebSocket字节流通讯示例

    websocket进行通讯时,可以选择采用字符串或者字节流的传输模式.但在发送与接收时,需要考虑数据的分包,即分成一个个请求与响应消息.无论是采用哪种传输模式,都不免要遇到这个问题. 采用字符串传输时 ...

  4. ssh常用操作

    介绍ssh.sshpass.scp等linux下远程操作常用的命令 ssh 通过终端远程linux服务器的常用命令 ssh root@192.168.1.100 #以root用户链接到目标服务器,连通 ...

  5. 2. RDD编程

    2.1 编程模型 在Spark中,RDD被表示为对象,通过对象上的方法调用来对RDD进行转换.经过一系列的transformations定义RDD之后,就可以调用actions触发RDD的计算,act ...

  6. 在centos7.6上部署.netcore 3.0 web程序

    首先需要一个全新的centos系统. 第一步:按照微软官方文档配置.netcore环境: https://dotnet.microsoft.com/download/linux-package-man ...

  7. ORACLE数据库实现自增的两种方式

    Mysql数据库因为其有自动+1,故一般我们不需要花费太多时间,直接用关键字auto_increment即可,但是Oracle不行,它没有自动增长机制.顾我们需要自己去实现.一般有两种方式,但是这两种 ...

  8. DevExtreme学习笔记(一) DataGrid中数据提交注意事项

    1.数据提交的{}数据需转化json格式 syncPost('/controller/action', { values: JSON.stringify({d:x}) }, function (res ...

  9. sqlserver TOP 问题(转载)

          来谈谈SQL数据库中"简单的"SELECT TOP—可能有你从未注意到的细节 首先从博客园的Jerome Wong网友说起 他提出了一个这样的问题 本人写了好几年SQL ...

  10. There is no getter for property named 'PRODUCT_ID' in 'class java.lang.String'

    背景:心血来潮之际,准备搭建以下多月未曾碰触过的Mybatis框架,体验一番原生之美.殊不知能力有限,错误百出.特抒此文以纪念此坑.问题:想在sql管理中来统一处理一些简单的判断,但是添加判断之后参数 ...