zoukankan      html  css  js  c++  java
  • 开发环境之ElasticSearch

    查看更多开发环境配置,请点击《开发环境配置大全》

    拾章:ElasticSearch安装教程

    1)去官网下载ElasticSearch安装包

    本教程所有软件使用的版本:5.6.8

    http://www.elasticsearch.org/

    选择无中文目录,解压缩ElasticSearch安装包即安装完成;

     

    2)配置环境变量

    在原有的PATH下追加:D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8in;

    cmd执行elasticsearch,显示两个端口,java开发用9300,其他用9200;

    浏览器输入http://localhost:9200会返回数据,即启动成功。

     

    在服务器server2012下启动可能会出现如下问题:

    Unable to get Charset 'sun.stdout.encoding', using default UTF-8 java.nio.charset.UnsupportedCharsetException: cp65001

    解决方案:

    执行cmd输入chcp 936,切换到GBK编码,然后跳转到ES文件夹启动ES程序。

    ES绑定IP地址

    打开elasticsearch.yml配置文件,设定绑定的ip,如:network.host: 192.168.66.100

     

    3)安装图形化界面前提环境

    3.1 这个图形化界面是由node.js做的,所以先安装node.js

    node.js是一个javascript的运行环境;

    可以使前后端使用同一份js文件,但是后端一般会用java实现;

    下载路径:https://nodejs.org/zh-cn/download/

    下载安装包之后直接下一步安装;dos下输入node -v查看版本。

     

    3.2 安装npm

    node包管理和分发的工具;

    node.js使用npm安装我们所依赖的js包;

    vue中需要通过npm安装webpack;

    npm随Node.js一起安装;

    但是要配置一些路径,以便从远程下载js包时下载到指定目录,在Node文件夹下创建npm_modules和npm_cache文件夹,然后win+r,cmd,输入npm config set prefix "D: ensquare_APP odejs pm_modules";继续输入执行npm config set cache "D: ensquare_APP odejs pm_cache"。

     

    3.3 安装cnpm

    代替了npm,从国内淘宝镜像下载js包;

    dos命令下执行:npm install -g cnpm --registry=https://registry.npm.taobao.org

    查看镜像指向位置nrm ls,输出结果前面有个*,表示指向的镜像地址;

    指定位置命令nrm use taobao(地址),更换地址。

     

    3.4 将grunt安装为全局命令

    win+r+cmd,执行命令 npm install -g grunt-cli;

     

    4)安装图形化界面(head插件)

    网上搜索elasticsearch head下载即可,解压缩到任意目录下安装完成;

    安装依赖:win+r+cmd,进入图形化安装包的路径D: ensquare_APPelasticsearch-head-masterelasticsearch-head-master,执行命令 cnpm install;

    启动图形化界面:win+r+cmd,进入图形化安装包的路径D: ensquare_APPelasticsearch-head-masterelasticsearch-head-master,执行命令 grunt server;默认端口9100;浏览器输入http://localhost:9100/即可访问。

     

    5)ElasticSearch配置允许跨域访问

    找到D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8configelasticsearch.yml文件,在最下面添加下面2行代码即可:

    http.cors.enabled: true

    http.cors.allow-origin: "*"

     

    6)配置IK分词器

    下载IK分词器安装包:

    https://github.com/medcl/elasticsearch-analysis-ik/releases

    将IK分词器的解压后的插件包放到D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8plugins下即可

     

    7)添加IK词汇(比如一些网上流行词)

    在D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8pluginsikelasticsearchconfig下创建一个文件,命名为myword.dic,在里面添加词汇(如高富帅),然后在同级的IKAnalyzer.cfg.xml文件下启用该文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
      <comment>IK Analyzer 扩展配置</comment>
      <!--用户可以在这里配置自己的扩展字典 -->
      <entry key="ext_dict">myword.dic</entry>
      <!--用户可以在这里配置自己的扩展停止词字典-->
      <entry key="ext_stopwords"></entry>
      <!--用户可以在这里配置远程扩展字典 -->
      <!-- <entry key="remote_ext_dict">words_location</entry> -->
      <!--用户可以在这里配置远程扩展停止词字典-->
      <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>

    测试是否生效:http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=高富帅

     

    默认添加完之后只对后面的数据生效,对之前的数据不生效,除非重新索引,即重新创建索引数据,解决方法如下:

    修改完重启ES,调用接口使其生效,POST请求:

    http://127.0.0.1:9200/jsbz*/_update_by_query?conflicts=proceed
    或 
    http://127.0.0.1:9200/jsbz*/_update_by_query?conflicts=proceed&scroll_size=10000

    jsbz*:匹配多个索引库,也可以设置多个,逗号隔开

    conflicts=proceed:防止错误时终止程序执行

    scroll_size=10000:默认1000,设置批量处理数量

    返回:

    {
        "took": 87,//花费时间
        "timed_out": false,//是否超时
        "total": 14,//数据总数
        "updated": 14,//更新总数
        "deleted": 0,//删除总数
        "batches": 1,//scroll响应数量
        "version_conflicts": 0,//版本冲突数量
        "noops": 0,
        "retries": {
            "bulk": 0,
           "search": 0
        },
        "throttled_millis": 0,
        "requests_per_second": -1.0,
        "throttled_until_millis": 0,
        "failures": []
    }

    8)logstash(日志收集处理框架,同步索引)

    ElasticSearch与Mysql数据同步(即将Mysql数据导入索引库)

    8.1 logstash的安装

    下载安装包,解压即可

    8.2 logstash的命令

    测试:进入安装包bin目录下(可配置环境变量),win+r+cmd,执行 logstash -e 'input { stdin { } } output { stdout {} }'

    -e:表示直接执行

    -f:表示执行本地的文件(因为文档太多,一般通过这种方式导入)

    8.3 同步索引

    在logstash的安装包下创建一个文件夹mysqlcode,在mysqlcode下创建mysql.conf配置文件,让它配

    置好要导入的数据库相关信息;

    input {
      jdbc {
          # mysql jdbc connection string to our backup databse
          # 连接哪个数据库
          jdbc_connection_string => "jdbc:mysql://localhost:3306/tensquare_article?characterEncoding=UTF8"
          
          # the user we wish to excute our statement as
          # 账号、密码
          jdbc_user => "root"
          jdbc_password => "admins"
          
          # the path to our downloaded jdbc driver  
          # 数据库驱动所在位置
          jdbc_driver_library => "D:	ensquare_APPlogstash-5.6.8mysqlcodemysql-connector-java-5.1.46.jar"
          # the name of the driver class for mysql
          jdbc_driver_class => "com.mysql.jdbc.Driver"
          
          # 是否分页
          jdbc_paging_enabled => "true"
          # 显示多少条数据
          jdbc_page_size => "50"
          #以下对应着要执行的sql的绝对路径。
          #statement_filepath => ""
          statement => "select id,title,content,state from tb_article"
          #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
          schedule => "* * * * *"
      }
    }
    
    output {
      elasticsearch {
          #ESIP地址与端口
          hosts => "localhost:9200" 
          #ES索引名称(自己定义的)
          index => "tensquare_article"
          #自增ID编号
          document_id => "%{id}"
          document_type => "article"
      }
      stdout {
          #以JSON格式输出
          codec => json_lines
      }
    }

    win+r+cmd,执行 logstash -f D: ensquare_APPlogstash-5.6.8mysqlcodemysql.conf(其实就是

    找到那个配置文件去执行导入,可能会卡住,耐心等待)

    注意:删除操作是不能同步的,所以一般要设置状态,修改状态,根据状态查询相应的信息即可

    9)logstash 6.2.1版本

    9.1 安装logstash-input-jdbc插件

    6.X版本开始不会自带这个插件,这个插件由ruby开发,所以先下载ruby,然后cmd进入到logstash的bin目录执

    行命令:

    .logstash-plugin.bat install logstash-input-jdbc

    9.2 配置文件

    在D: ensquare_APPlogstash-6.2.1config下创建一个模板文件xc_course_template.json,设置ES的映射关系:

    {
       "mappings" : {
          "doc" : {
             "properties" : {
                "charge" : {
                   "type" : "keyword"
                },
                "description" : {
                   "analyzer" : "ik_max_word",
                   "search_analyzer" : "ik_smart",
                   "type" : "text"
                },
                "end_time" : {
                   "format" : "yyyy-MM-dd HH:mm:ss",
                   "type" : "date"
                },
                "expires" : {
                   "format" : "yyyy-MM-dd HH:mm:ss",
                   "type" : "date"
                },
                "grade" : {
                   "type" : "keyword"
                },
                "id" : {
                   "type" : "keyword"
                },
                "mt" : {
                   "type" : "keyword"
                },
                "name" : {
                   "analyzer" : "ik_max_word",
                   "search_analyzer" : "ik_smart",
                   "type" : "text"
                },
                "pic" : {
                   "index" : false,
                   "type" : "keyword"
                },
                "price" : {
                   "type" : "float"
                },
                "price_old" : {
                   "type" : "float"
                },
                "pub_time" : {
                   "format" : "yyyy-MM-dd HH:mm:ss",
                   "type" : "date"
                },
                "qq" : {
                   "index" : false,
                   "type" : "keyword"
                },
                "st" : {
                   "type" : "keyword"
                },
                "start_time" : {
                   "format" : "yyyy-MM-dd HH:mm:ss",
                   "type" : "date"
                },
                "status" : {
                   "type" : "keyword"
                },
                "studymodel" : {
                   "type" : "keyword"
                },
                "teachmode" : {
                   "type" : "keyword"
                },
                "teachplan" : {
                   "analyzer" : "ik_max_word",
                   "search_analyzer" : "ik_smart",
                   "type" : "text"
                },
                "users" : {
                   "index" : false,
                   "type" : "text"
                },
                "valid" : {
                   "type" : "keyword"
                }
             }
          }
       },
       "template" : "xc_course"
    }

    在D: ensquare_APPlogstash-6.2.1config下创建一个数据库配置文件mysql.conf:

    input {
      stdin {
      }
      jdbc {
          # 连接哪个数据库
          jdbc_connection_string => "jdbc:mysql://localhost:3307/xc_course?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"
          
          # the user we wish to excute our statement as
          # 账号、密码
          jdbc_user => "root"
          jdbc_password => "admins"
          
          # the path to our downloaded jdbc driver
          # 数据库驱动所在位置
          jdbc_driver_library => "D:/tensquare_APP/logstash-6.2.1/config/mysql-connector-java-5.1.46.jar"     
          # the name of the driver class for mysql
          jdbc_driver_class => "com.mysql.jdbc.Driver"
          
          # 是否分页
          jdbc_paging_enabled => "true"
          # 显示多少条数据
          jdbc_page_size => "50000"
          # 要执行的sql文件
          #statement_filepath => "/conf/course.sql"
          # 将数据库timestamp大于logstash_metadata设置的时间的数据都同步到索引库
          statement => "select * from course_pub where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)"
          # 定时配置,默认1分钟一次
          schedule => "* * * * *"
          record_last_run => true
          # timestamp设置位置
          last_run_metadata_path => "D:/tensquare_APP/logstash-6.2.1/config/logstash_metadata"
      }
    }
    ​
    output {
      elasticsearch {
          # ES的ip地址和端口
          hosts => "localhost:9200"
          # 集群设置
          #hosts => ["localhost:9200","localhost:9202","localhost:9203"]
          # ES索引库名称
          index => "xc_course"
          # 自增ID编号
          document_id => "%{id}"
          # 对应type(表名)
          document_type => "doc"
    ​
          # 模板位置
          template =>"D:/tensquare_APP/logstash-6.2.1/config/xc_course_template.json"
          template_name =>"xc_course"
          template_overwrite =>"true"
      }
      stdout {
          #日志输出,以JSON格式输出
          codec => json_lines
      }
    }

    9.3 启动

    cmd进入D: ensquare_APPlogstash-6.2.1in,执行:

    logstash.bat -f ../config/mysql.conf

    如果启动过程报错:找不到或无法加载主类 FilesJavajdk1.8.0_73lib;C:Program;

    则编辑logstash.bat文件,将里面的%CLASSPATH%加上双引号:

    %JAVA% %JAVA_OPTS% -cp "%CLASSPATH%" org.logstash.Logstash %*

    同步如下:

    ES数据:

  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/xdzy/p/10993053.html
Copyright © 2011-2022 走看看