码迷,mamicode.com
首页 > 编程语言 > 详细

java-es理论

时间:2020-01-09 21:13:59      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:否则   位置   net   包含   Lucene   pos   fir   个数   保存   

导读:

第一节:原理与过程

  1:底层

  2:过程

第二节:集群策略与搭建

  1:分发策略

  2:搭建

第三节:对比

  1:对比solr

  2:对比数据库

第四节:操作

  1:rest,curl

  2:java操作

 

第一节:原理与过程

  1、底层(基于luceue框架)

    Luceue

      倒排索引

        对数据进行分词处理,信息存储(位置,数量,偏移量)

        例子:

          我是中国人。

          中国是全球人口最多的国家,中国人也最多(2)

          1:我 (1:1){0}(第一行,有一个,索引0)

          2:中国 (1:1) {2},(2:2){0,15} (第一行,有一个,索引2)(第二行,有两个,索引0和15位置)

      正排索引:

        对数据进行分词处理,生成索引。

        缺点:数量太大

    Document:存储的基本单位,类似java类,以json格式存数据

      包含:

        context:内容

        Size:大小

        Path:数据来源

  2、过程

    数据

      --->document的形式

      ---->对document中的context进行分词处理(ik分词器)

      ---->对分词进行倒排索引

        ---->是否保存之前的document

        ---->强制生成新的ducument(索引的)

          新的document可选择的保存需要的:

            唯一ID:倒排索引之后的ID

            Path:(必选)

            Size::(选存)

            Context:(选存,列表中的简要提示用)

 

  3、单机所能承载的数据峰值,速度,依据企业的业务量

 

第二节:集群策略与搭建

  1、分发策略

    Master 是去中心化的,很淡化了。

      在一个服务器上启动一个执行代理,即master,进行数据的请求及数据统一回收等

    分发策略(hashcode%lucenu主片个数)hashcode是document的ID的hash

      一个节点放多个lucene主片,所以可以采用多个lucene主片分发到各个节点。这样如果需要扩充,只需要给片迁移就可以了。

 

  2、搭建:

    2.1 不能用root用户:es有远程执行脚本的功能,容易中木马。

      创建普通用户

        Useradd 名字

        Passwd  名字

      切换用户

        Su 名字   switch user

      修改权限

        Chown 用户:用户 -R 文件夹 change own

 

    2.2 下载安装目录包:

      Yum install unzip

      unzip elasticsearch-6.4.1.zip -d /opt/sxt/es

 

    2.3 修改配置文件:

      Cluster.name //集群名称

      Node.name 别名

      Network.host //服务器IP

      http.host 9200 //与网页的通讯端口

      防脑裂

        discovery.zen.ping.multicast.enabled: false //多重广播,来一台自动加进一台到集群,这里手动,否则容易脑裂

        discovery.zen.ping.unicast.hosts: ["192.168.133.6","192.168.133.7", "192.168.133.8"]

        discovery.zen.ping_timeout: 120s

        client.transport.ping_timeout: 60s

 

    2.4 可视化插件:

      原因:本身是json格式的显示,用这个插件让es的运行状况可视化

      操作:资料/附件 中的plugins 导入到es路径下,修改权限,也可以不修改

 

    2.5 启动:要每一台都启动

      ./elasticsearch

 

    2.6 测试插件效果:plugin插件

      http://ip:9200/_plugin/head 即:http://192.168.133.6:9200/_plugin/head?pretty

 

第三节:对比

  1、与solr的对比:

    Solr是静态数据,即先将数据存进来

    Es是动态数据,不断有新数据进来

    Es速度比solr也快

 

  2、对比:

     技术图片

 

第四节:操作

  1、Rest:操作es数据库的架构风格,类似于接口,给用户来进行增删改查操作

    Get 获取

    Put 修改(ID存在的是修改,不存在的是新建)

    Post 新建

    Delete 删除

    Head 头信息

     技术图片

    实际操作:

    Curl操作:

      curl -XPUT http://192.168.133.6:9200/test/  //创建库

      Curl -XDELETE ... //删除库

 

      //在test(index)下的employee(type)中建立一个doc {...doc内容}

      //也可以像PUT一样指定id,与put中相同,所以POST更加灵活,不需要用put,post就都可以搞定了

      curl -XPOST http://192.168.133.6:9200/test/employee -d ‘ //test相当于库。employee相当于表。

      { //相当于一行数据

         "first_name" : "bin", //字段

         "age" : 33,

         "about" : "I love to go rock climbing",

         "interests": [ "sports", "music" ]

      }‘

 

      //put形式:需要定义id,例子中的111(如果是id已经存在的会更新数据,非创建)

      curl -XPUT http://192.168.133.6:9200/test/employee/111 -d ‘

      {

         "first_name" : "god bin",

         "last_name" : "pang",

         "age" : 42,

         "about" : "I love to go rock climbing",

         "interests": [ "sports", "music" ]

      }‘

 

      //查询,pretty是显示格式化

      curl -XGET http://192.168.133.6:9200/test/employee/1?pretty

 

      //查找first_name字段下所有含有’bin’的

      curl -XGET http://192.168.133.6:9200/test/employee/_search?q=first_name="bin"

 

      //规范的查询,同上的查询

      curl -XGET http://192.168.133.6:9200/test/employee/_search?pretty -d ‘

      {

       "query":

        {"match":

          {"first_name":"bin"}

         }

      }‘

  

      //多个field查询,last_name 和first_name中都含有’bin’的

      curl -XGET http://192.168.133.6:9200/test/employee/_search?pretty -d ‘

      {

      "query":

         {"multi_match":

          {

            "query":"bin",

            "fields":["last_name","first_name"],

            "operator":"and"

          }

        }

      }‘

 

      //多个term对多个field发起查询:bool(boolean)

      //组合查询,must,must_not,should

      //must : 必须满足

      //must_not :必须不能满足

      //should+should  : 并集

      curl -XGET http://192.168.133.6:9200/test/employee/_search?pretty -d ‘

      {

       "query":

        {"bool" :

           {

          "must" :

               {"match":

              {"first_name":"bin"}

            },

           "must" :

            {"match":

              {"age":33}

            }

          }

        }

      }‘

 

      //修改配置

      //创建test2库,这个库里有2个从

        curl -XPUT ‘http://192.168.133.6:9200/test2/‘ -d‘{"settings":{"number_of_replicas":2}}‘

      //创建test3库,这个库有3个主,3个从(主是分布在各个节点,从放在非主的其它节点,所以从的个数要小于集群节点个数)

        curl -XPUT ‘http://192.168.133.6:9200/test3/‘ -d‘{"settings":{"number_of_shards":3,"number_of_replicas":3}}‘

 

  2、java操作(在java-es的其他随笔中有详细写出)

 

  3、分词器(ik) 及配置文件修改、分发(es与ik之间有相互的对应版本

    版本 文件 安装

    在es的plugins下创建目录,解压ik在这个下面。

    修改配置:

      elasticsearch.version //版本对应上

 

java-es理论

标签:否则   位置   net   包含   Lucene   pos   fir   个数   保存   

原文地址:https://www.cnblogs.com/dblog/p/12173295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!