• 开发环境之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数据:

  • 相关阅读:
    Modernizr使用指南(转)
    使用Func<>和Action简化委托
    实现类似MVC ViewBag类型的对象
    更改服务器的SID 加入域控制器提示SID重复
    SQL SERVER 执行大于80M的SQL 脚本
    完全关闭IIS日志,包括System32下的LogFile
    MVC不用302跳转Action,内部跳转
    SHA1l加密
    获取当前时间戳
    invoke反射
  • 原文地址:https://www.cnblogs.com/xdzy/p/10993053.html
Copyright © 2020-2023  润新知