zoukankan      html  css  js  c++  java
  • ES简单介绍

    一、什么是ElasticSearch

      ElasticSearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。ElasticSearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群。
      优点:扩展性好,可部署上百台服务器集群近实时地去索引数据,搜索数据。
     
    二、ES快速入门
      ES在项目中的应用方式:用户在前端搜索关键字,项目前端通过HTTP方式请求项目服务端,项目服务端通过Http RESTful方式请求ES集群进行搜索,ES集群从索引库检索数据。

    步骤一:创建索引库(可使用postman或head插件创建,本案例使用postman)

      【相关概念】

      ES的索引库是个逻辑概念,它包括了分词列表及文档列表,同个索引库中存储了相同类型的文档。它就相当于MySQL中的表,或相当于Mongodb中的集合。
      关于索引这个语:
        索引(名词):ES是基于Lucene构建的个搜索服务,它要从索引库搜索符合条件索引数据。
        索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。 
      【操作】put http://localhost:9200/索引库名称 
      
    { 
        "settings":{
             "index":{
                 "number_of_shards":1, //分片数,即将索引库分成多片存储在不同节点,提高可用性
                 "number_of_replicas":0 //副本数量,提高可靠性
              } 
        } 
    }                        
      
    步骤二:创建映射
      【相关概念】
      在索引中每个文档都包括了个或多个field创建映射就是向索引库中创建field的过程,下边是documentfield与关系数据库的概念的类比:
      文档(Document----------------Row记录
      字段(Field-------------------Columns
    注意:6.0之前的版本有type(类型)概念,type相当于关系数据库的表,ES官方将在ES9.0版本中彻底删除type
      上边讲的创建索引库相当于关系数据库中的数据库还是表?
      1、如果相当于数据库就表示个索引库可以创建很多不同类型的文档,这在ES中也是允许的。
      2、如果相当于表就表示个索引库只能存储相同类型的文档,ES官方建议 在个索引库中只存储相同类型的文
      【操作】发送 post 请求:http://localhost:9200/xc_course/doc/_mapping
    { 
    "properties": { "name": { "type": "text" //由于ES6.0版本还没有将type彻底删除,所以暂时把type个没有特殊意义的名字。
      },
    "description": { "type": "text"
      },
    "studymodel": { "type": "keyword"   } } }
    步骤三:创建文档——相当于MySQL数据库表中的记录
      【操作】发送:put Post http://localhost:9200/xc_course/doc/id值 (http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000
    { 
        "name":"Bootstrap开发框架", 
        "description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的 精美界面效果。", 
        "studymodel":"201001" 
    }

    步骤四:搜索文档
    【操作】
      单一查找:发送:get http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000
      查找所有:get http://localhost:9200/xc_course/doc/_search 
      对应查找:get http://localhost:9200/xc_course/doc/_search?q=name:bootstrap 
              get http://localhost:9200/xc_course/doc/_search?q=studymodel:201001 
     
     
    三、集群管理
    1结点:ES集群由多个服务器组成,每个服务器即为Node结点(该服务只部署了ES进程)
    2分片:当我们的文档量很大时,由于内存和硬盘的限制,同时也为了提高ES的处理能力、容错能力及高可用能力,我们将索引分成若干分片,每个分片可以放在不同的服务器,这样就实现了多个服务器共同对外提供索引及搜索服务。个搜索请求过来,会分别从各各分片去查询,最后将查询到的数据合并返回给用户。
    3副本:为了提高ES的高可用同时也为了提高搜索的吞吐量,我们将分片复制份或多份存储在其它的服务器,这样即使当前的服务器挂掉了,拥有副本的服务器照常可以提供服务。
    4主结点:个集群中会有个或多个主结点,主结点的作用是集群管理,比如增加节点,移除节点等,主结点挂掉后ES会重新选个主结点。
    5结点转发:每个结点都知道其它结点的信息,我们可以对任意个结点发起请求,接收请求的结点会转发给其它结点查询数据。
     
      其中结点可分成三类:
    •  主结点:master节点主要用于集群的管理及索引 比如新增结点、分片分配、索引的新增和删除等。
    • 数据结点:data 节点上保存了数据分片,它负责索引和搜索操作。
    • 客户端结点:client 节点仅作为请求客户端存在,client的作用也作为负载均衡器,client 节点不存数据,只是将请求均衡转发到其它结点。
  • 相关阅读:
    [haoi2009]逆序对数列
    [haoi2008]木棍分割
    【LibreOJ 6277】数列分块入门 1 (分块)
    【模板】 最大流模板(ISAP)
    【模板】最大流模板(dinic)
    [模板] zkw线段树
    [luogu P1962] 斐波那契数列(带快速幂矩阵乘法模板)
    [SCOI2010] 股票交易 (单调队列优化dp)
    [luogu P2285] [HNOI2004]打鼹鼠
    [poj 2152] fire (树形dp)
  • 原文地址:https://www.cnblogs.com/qmillet/p/12563061.html
Copyright © 2011-2022 走看看