一、传统版安装
1.下载es: https://www.elastic.co/downloads/past-releases/elasticsearch-5-6-8
2.运行:下载后解压,进入到bin目录,执行:elasticsearch。浏览器输入http://localhost:9200/测试是否启动
3.安装head插件(用于可视化操作es)
1)下载head插件:https://github.com/mobz/elasticsearch-head
2)解压到任意目录,但是要和elasticsearch的安装目录区别开
3)安装node js ,安装cnpm
4)全局安装grunt 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所 设定的任务
npm install -g grunt-cli
5)安装依赖
cnpm install
6)进入elasticsearch-head目录启动head
grunt server
7)浏览器输入http://localhost:9100/测试head插件是否成功安装
8)在页面上方文本框输入es的地址(端口9200),点击连接按钮出现跨域问题
4.在es目录下的config/elasticsearch.yml添加两行使es能被head等插件跨域访问。改配置后重启es:
http.cors.enabled: true http.cors.allow-origin: "*"
5.安装IK分词器
1)下载ielasticsearch-analysis-ik-5.6.8.zip。下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
2)解压zip,重命名解压后的目录为ik,拷贝到elasticsearch/plugins目录
3)重启es
4)浏览器测试ik分词器:
http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员 //其中ik_max_word为最多切分,ik_smart为最少切分
5)自定义词库
a.进入elasticsearch/plugins/ik/config目录
b.新建一个my.dic文件,编辑内容:
c.修改elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml
<properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict">my.dic</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords"></entry> <!--用户可以在这里配置远程扩展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用户可以在这里配置远程扩展停止词字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
d.重启es。测试
http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=人艰不拆
二、使用
1.以Restful方式操作ES
● 新建一个名为articleindex索引。PUT请求
http://127.0.0.1:9200/articleindex/
● 查询全部文档。GET请求
http://127.0.0.1:9200/articleindex/article/_search
● 创建/修改文档(如果不存在_id为1的文档则会创建,反之则会修改)。PUT请求
http://192.168.184.134:9200/articleindex/article/1
● 按I_id查询文档。GET请求
http://192.168.184.134:9200/articleindex/article/1
● 基本匹配查询(查title为“好给力”的文档)。GET请求
http://192.168.184.134:9200/articleindex/article/_search?q=title:好给力
● 模糊查询。GET请求
http://192.168.184.134:9200/articleindex/article/_search?q=title:*s*
● 删除文档。DELETE请求
http://192.168.184.134:9200/articleindex/article/1
2.SpringDataElasticSearch
0)因为elasticsearch从5版本以后默认不开启远程连接,需要修改es目录下config/elasticsearch.yml,添加一行
transport.host: 0.0.0.0
如果不加上会出现NoNodeAvailableExceptionn[None of the configured nodes are available
其中0.0.0.0表示允许任何ip远程连接es。如果项目上线需要指定ip有权限访问
1)添加依赖
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>3.0.6.RELEASE</version> </dependency>
2)application.yml文件配置
spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300 #java操作es用的是9300端口
3)实体类
@Document(indexName = "tenpower", type = "article") public class Article implements Serializable { @Id private String id; @Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") private String title; //文章标题 @Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") private String content;//文章正文 private String status; //审核状态 //Getter and Setter ... }
4)Dao。也是SpringData风格
public interface ArticleSearchDao extends ElasticsearchRepository<Article,String> { }
3.logstash使用
1)解压logstash,然后在解压目录下创建mysqletc目录(名称随意)
2)在该目录下创建mysql.conf(名称随意),内容如下(需要修改配置):
input { jdbc { # mysql jdbc connection string to our backup database jdbc_connection_string => "jdbc:mysql://192.168.25.129:3306/tensquare_article?characterEncoding=UTF8" # the user we wish to excute our statement as jdbc_user => "root" jdbc_password => "123456" # the path to our downloaded jdbc driver jdbc_driver_library => "E:/logstash-6.7.0/mysqletc/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 => "" statement => "select id,title,content from tb_article" #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出) schedule => "* * * * *" } } output { elasticsearch { #ESIP地址与端口 hosts => "localhost:9200" #ES索引名称(自己定义的) index => "tenpower" #自增ID编号 document_id => "%{id}" document_type => "article" } stdout { #以JSON格式输出 codec => json_lines } }
3)将mysql驱动包mysql-connector-java-5.1.46.jar拷贝到mysqletc目录下
4)在logstash的bin目录下执行
logstash -f ../mysqletc/mysql.conf
过一会可以看到执行成功log
三、docker下安装es
1.安装es
#下载镜像
docker pull elasticsearch:5.6.8
#运行容器 docker run -di --name=es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
2.修改application.yml将ip地址改为宿主机的ip地址
3.进入容器修改/usr/share/elasticsearch/config下的elasticsearch.yml,追加
#防止出现NoNodeAvailableException异常 transport.host: 0.0.0.0 #允许head插件跨域访问 http.cors.enabled: true http.cors.allow-origin: "*"
4.修改宿主机系统配置
1)vi /etc/security/limits.conf,追加
* soft nofile 65536 * hard nofile 65536
其中nofile是单个进程允许打开的最大文件个数,soft nofile是软限制,hard nofile是硬限制
2)vi /etc/sysctl.conf,追加
vm.max_map_count=655360
表示限制一个进程可以拥有的VMA(虚拟内存区域)的数量
3)执行下面命令 修改内核参数马上生效
sysctl -p
5.ik分词器安装和win下安装一样
6.安装head插件
1)下载镜像
docker pull mobz/elasticsearch-head:5
2)运行head容器
docker run -di --name=es-head -p 9100:9100 mobz/elasticsearch-head:5
7.logstash同win
四、完整版安装
1.添加一个用户(viuman)。因为elasticsearch默认不允许以root账号运行
2.改es配置文件
1)vim elasticsearch-7.4.0/config/jvm.options。把内存调小若512还是大了继续减少
-Xms512m
-Xmx512m
2)vim elasticsearch-7.4.0/config/elasticsearch.yml
path.data: /home/viuman/elasticsearch/data # 数据目录位置
path.logs: /home/viuman/elasticsearch/logs # 日志目录位置
network.host: 0.0.0.0 # 绑定到0.0.0.0,允许任何ip来访问
node.name: node-1 #打开一个注释节点
cluster.initial_master_nodes: ["node-1"] # 取消注释保留一个节点
如果centos内核版本低于3.5,需要禁用es的插件
bootstrap.system_call_filter: false
3)在es目录下建上边指定的data和logs两个目录
注:elasticsearch.yml的其他配置信息
3.修改系统配置文件
1)修改es可运行最大线程数。vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
2)解决线程数不够。vim /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
3)限制进程可以拥有的VMA(虚拟内存区域)的数量。vim /etc/sysctl.conf
vm.max_map_count=655360
4.刷新配置,然后重启终端。刷新命令
sysctl -p
5.安装ik分词器
1)ik版本和es保持一致,下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
2)解压到elasticsearch的plugins/ik目录中