ElasticSearch
1.下载地址: https://www.elastic.co/cn/downloads/elasticsearch 选择对应的版本即可
2.启动:解压文件之后,找到bin目录,找到elasticsearch.bat,直接双击就可以了,启动一共是占了两个端口,一个是9300,一个是9200,如果是java开发的话用的是9300.其他的是9200,验证启动成功直接在浏览器输入http://127.0.0.1:9200能出来一些相关信息就说明是已经启动成功了
3.创建索引库:用put方式提交,访问 http://localhost:9200/tensquare_elasticsearch ,这样就创建了一个名称为tensquare_elasticsearc的索引库,请求返回的数据
4.添加文档(索引)操作 以post方式提交 http://localhost:9200/tensquare_elasticsearch/article body:
{
"title":"java项目",
"content":"黑马十次方"
}
返回结果如下
{
"_index": "tensquare_elasticsearch",
"_type": "article",
"_id": "X2MfS2cBS3Rp8wJxTrVF",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
_id是由系统自动生成的
5.查询全部文档 查询某索引类型的群补数据 以get方式请求 http://localhost:9200/tensquare_elasticsearch/article/_search 返回结果如下
{
"took": 59,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "tensquare_elasticsearch",
"_type": "article",
"_id": "X2MfS2cBS3Rp8wJxTrVF",
"_score": 1,
"_source": {
"title": "java项目",
"content": "黑马十次方"
}
}
]
}
}
6.修改操作 以put方式提交以下地址 http://localhost:9200/tensquare_elasticsearch/article/X2MfS2cBS3Rp8wJxTrVF 最后一个/后面是id,这里的修改操作,如果id没有的话就会去创键一个,
7.按id查询文档 以get方式请求 http://localhost:9200/tensquare_elasticsearch/article/1
8.按条件去查询 根据某个关键词去查询,以get方式提交 http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:java
9.模糊查询 我们可以用*代表任意字符
http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:*j*
10.删除操作 根据id去删除,用delete方式提交
http://localhost:9200/tensquare_elasticsearch/article/X2MfS2cBS3Rp8wJxTrVF
安装head插件
如果都是通过rest请求的方式使用elasticsearch有点麻烦,而且不够人性化,我们一般都会通过图形化界面实现日常的管理,最常用的就是head插件
1.下载head插件的地址
https://github.com/mobz/elasticsearch-head
2.安装nodejs,安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
3.将grunt安装为全局命令,grunt是基于nodejs的构建工具,它可以自动执行你所设定的任务
npm install -g grunt-cli
4.直接构建项目
cnpm install
依赖下载完成之后
grunt server
5.启动成功后就可以访问9100了.但是链接不上我们本地的elasticsearch,需要解决跨域问题,在elas的安装目录下找到confg里面的elasticsearch.yml,加上两句命令
http.cors.enabled: true
http.cors.allow-origin: "*"
IK分词器
1.下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases
下载和自己版本对应的ik分词器,否则打不开
2.解压 解压完成后,把文件夹改成ik,放到es目录下的plugins文件夹中,重启es
3.自定义词库 在ik分词器的config目录下添加要自定义的dic文件,
4.测试有没有安装成功
http://localhost:9200/_analyze?analyzer=ik_smart&pretty=true&text=我数一二三木头人
如果没有报错就是说明成功了,报了400的说明版本不匹配或者是es版本更换成低的
elasticsearch与mysql的同步
logstash
1.logstash下载完成之后直接解压就可以使用,在bin目录下点击logstash.bat,会一闪而过,说明是已经启动了, 2.启动之后怎么验证启动成功了呢,打开cmd输入命令
logstash -e 'input { stdin{}} output { stdout{}}'
在控制台输入字符,随后就有日志出来,说明已经启动成功了, -e后面跟的是命令,-f是文件 3.mysql数据导入es 在logstash解压目录下创建一个文件夹aaa,名字随意,文件夹下放入mysql的驱动包和 创建mysql.conf,内容如下
input {
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.254.128:3306/tensquare_article?characterEncoding=UTF8"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
# the path to our downloaded jdbc driver
jdbc_driver_library => "D:\TEN\logstash-5.6.8\logstash-5.6.8\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 => "50"
#以下对应着要执行的sql的绝对路径。
#statement_filepath => ""
statement => "select id,title,content,state from tb_article"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
schedule => "* * * * *"
}
}
output {
elasticsearch {
#ESIP地址与端口
hosts => "127.0.0.1:9200"
#ES索引名称(自己定义的)
index => "tensquare_article"
#自增ID编号
document_id => "%{id}"
document_type => "article"
}
stdout {
#以JSON格式输出
codec => json_lines
}
}
编辑完成之后检查没有什么问题,在命令行下执行
logstash -f ../aaa/mysql.conf
docker环境下安装es
(1)下载镜像
docker pull elasticsearch:5.6.8
(2)创建容器
docker run -di --name=tensquare_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
(3)启动浏览器查看是否启动成功
http://你的ip:9200
(4)修改项目中的application.yml的ip (5)运行测试程序,发现会有一些报错,这个是因为es5之后默认不再开启远程链接,需要修改配置文件 (6)进入容器
docker exec -it tensquare_es /bin/bash
进入容器之后会发现里面有一些命令是没有的,ll,vi等好多都没有,这样我们只能通过宿主机中的某个文件来实现对配置容器的修改 (7)复制配置文件到宿主机
docker cp tensquare_es:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
(8)停止和删除之前创建的容器
docker stop tensquare_es
docker rm tensquare
(9)重新执行创建命令
docker run -di --name=tensquare_es -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
(10)修改/usr/share/elasticsearch.yml
将transport.host: 0.0.0.0的注释打开,前面的#去掉,其作用是允许任何ip去访问
(11)重新启动es
docker restart tensquare_es
重启之后我们之后会发现重启失败了,这是为什么呢,是因为es在启动过程中会进行检查,比如最多打开的文件个数以及虚拟内存区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所有我们需要对系统进行调优
(12)一共修改两处 修改/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
nofile是单个进程允许打开的最大文件数,soft nofile是软限制,hard nofile是硬限制
修改/etc/sysctl.conf
vm.max_map_count=655360
限制一个进程可以拥有vma(虚拟内存区域)的数量 修改 完成后执行以下命令立即生效
sysctl -p
(13)重启虚拟机,重启容器,再次启动容器就可以进行远程访问了
docker环境下ik分词器的安装
(1)通过sftp将ik文件夹上传到虚拟机上
(2)将文件夹复制到容器内/usr/share/elasticsearch/plugins/
docker cp ik tensquare_es:/usr/share/elasticsearch/plugins/
(3)重启,即可加载ik分词器