zoukankan      html  css  js  c++  java
  • ElasticSearch 初识ES

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/u013047584/article/details/80869130

           接触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

     
  • 相关阅读:
    Single Number II
    Best Time to Buy and Sell Stock
    Linked List Cycle
    Single Number
    Max Points on a Line
    Strategy
    LRU Cache
    Word Break II
    Text Justification
    Median of Two Sorted Arrays
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11416231.html
Copyright © 2011-2022 走看看