ElasticSearch安装教程

ElasticSearch安装教程

1)下载安装包

本教程所有软件使用的版本:5.6.8,http://www.elasticsearch.org/,选择无中文目录,解压缩ElasticSearch安装包即安装完成。

2)配置启动

在原有的PATH下追加:D:\tensquare_APP\elasticsearch-5.6.8\elasticsearch-5.6.8\bin;

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)安装图形化界面

安装Node

这个图形化界面是由node.js做的,所以先安装node.js,node.js是一个javascript的运行环境;可以使前后端使用同一份js文件,但是后端一般会用java实现;

下载路径:https://nodejs.org/zh-cn/download/,下载安装包之后直接下一步安装;dos下输入node -v查看版本。

安装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:\tensquare_APP\nodejs\npm_modules";继续输入执行npm config set cache "D:\tensquare_APP\nodejs\npm_cache"。

安装Cnpm

代替了npm,从国内淘宝镜像下载js包;dos命令下执行:npm install -g cnpm --registry=https://registry.npm.taobao.org;查看镜像指向位置nrm ls,输出结果前面有个*,表示指向的镜像地址;指定位置命令nrm use taobao(地址),更换地址。

将grunt安装为全局命令

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

安装head插件

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

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

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

5)配置跨域访问

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

http.cors.enabled: true
http.cors.allow-origin: "*"

6)配置IK分词器

下载IK分词器安装包:https://github.com/medcl/elasticsearch-analysis-ik/releases

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

7)添加IK词汇

比如一些网上流行词,在D:\tensquare_APP\elasticsearch-5.6.8\elasticsearch-5.6.8\plugins\ik\elasticsearch\config下创建一个文件,命名为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索引同步

logstash是日志收集处理框架,可做索引同步,ElasticSearch与Mysql数据同步(即将Mysql数据导入索引库)

logstash安装

下载安装包,解压即可

logstash命令

测试:进入安装包bin目录下(可配置环境变量),win+r+cmd,执行:

logstash -e 'input { stdin { } } output { stdout {} }'

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

同步索引

在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:\tensquare_APP\logstash-5.6.8\mysqlcode\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 => "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:\tensquare_APP\logstash-5.6.8\mysqlcode\mysql.conf(其实就是找到那个配置文件去执行导入,可能会卡住,耐心等待)。注意删除操作是不能同步的,所以一般要设置状态,修改状态,根据状态查询相应的信息即可。

9)logstash 6.2.1版本

安装logstash-input-jdbc插件

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

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

修改配置文件

在D:\tensquare_APP\logstash-6.2.1\config下创建一个模板文件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:\tensquare_APP\logstash-6.2.1\config下创建一个数据库配置文件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
  }
}

启动logstash

cmd进入D:\tensquare_APP\logstash-6.2.1\bin,执行:

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

如果启动过程报错:找不到或无法加载主类Files\Java\jdk1.8.0_73\lib;C:\Program;则编辑logstash.bat文件,将里面的%CLASSPATH%加上双引号:

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

同步过程如下:

1593228541451

ES数据展示:

1593228569308

posted @ 2019-06-09 11:49  肖德子裕  阅读(1432)  评论(0编辑  收藏  举报