一、安装
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