这里我使用的是8.2.0版本。同时内容会介绍ik分词和elastic-head的安装,elasticsearch-java的配置。
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.2.0/elasticsearch-analysis-ik-8.2.0.zip
下载后,创建目录esplugins(名称自定义)用于后续es容器将插件目录挂载到该目录。由于我的docker环境是在window电脑下。创建目录地址C:\Users\QM\Desktop\es\esplugins8。
将下载的zip包解压到目录下。目录结构如下:
docker network create es
# 拉取elasticsearch镜像
docker pull elasticsearch:8.2.0
# 启动镜像(换行符是win下的,linux需要自己更改)
docker run -d --name es8 --net es ^
-v C:\Users\QM\Desktop\es\esplugins8:/usr/share/elasticsearch/plugins ^
-p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.2.0
启动之后在容器中查看日志。会打印出token,密码等信息,需要保存后续使用。页面如下。
启动成功后,访问https://127.0.0.1:9200/会出现如下界面:
账号elastic,密码就是控制台生成的。登录后看到如下图就是启动成功了:
我这边并没有发现密码和token哈,不过不急,可以自己生成。
# 生成超级管理员elastic的密码
docker exec -it es8 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
# 生成enrollment-token(目前只发现kibana登录需要使用)
docker exec -it es8 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
这时,需要修改es的配置文件。增加跨域及http的配置。可以直接进入容器修改,也可以copy出来修改在copy回去。由于进入容器还需要下载vim。我这边直接copy出来修改。
# copy到桌面
docker cp es8:/usr/share/elasticsearch/config/elasticsearch.yml C:\Users\QM\Desktop\elasticsearch.yml
# =====添加如下配置=====
# 开启跨域
http.cors.enabled: true
# 所有人访问
http.cors.allow-origin: "*"
# ======================
# =====修改如下配置为false=====
xpack.security.http.ssl:
enabled: false
# ======================
# 保存后copy回去
docker cp C:\Users\QM\Desktop\elasticsearch.yml es8:/usr/share/elasticsearch/config/elasticsearch.yml
这里解释下,为什么要修改http.ssl为false?
答:如果不修改,访问elasticsearch默认是https请求。也没问题。但是在java-api中操作,请求需要配置ca证书。我觉的很麻烦。关闭后直接使用基本认证账号密码就可以了。
修改后,重启es。
docker restart es8
# 拉取镜像
docker pull kibana:8.2.0
# 启动镜像(环境变量,指定中文,也就是汉化)
docker run -d --net es --name kb8 -p 5601:5601 -e "I18N_LOCALE=zh-CN" kibana:8.2.0
访问地址:http://localhost:5601/,如下:
这时,我们就可以把在elasticsearch启动时生成的令牌粘贴到里面。然后点击配置Elastic。
弹窗该窗口,kibana需要验证码。这个验证码在kibana容器控制台也可以看到:
如果没看到,也可以使用如下命令生成:
docker exec -it kb8 /usr/share/kibana/kibana-verification-code
然后就出现了如下(如果http.ssl没关,不会出现这种情况。但是后续步骤也是差不多的,继续看就好):
额,可能是我在elasticsearch配置文件中关闭了http.sll导致的。不慌,备选方案,点击手动配置。
这个地址是kibane访问elasticsearch的地址。如果检查上方的默认值肯定是不通的。在kibana容器中ping localhost:9200肯定不会通啊。但是他俩在一个docker网络。我们去docker查看下elasticsearch的ip地址。
# 查看网络详情
docker network inspect es
找到下面这一段。发现es的ip为172.18.0.2
在kibana页面输入http://172.18.0.2:9200检查,进入如下页面:
这个页面的用户kibana_system的密码需要我们去生成。命令如下:
docker exec -it es8 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system
生成后,输入密码点击配置,如下就算成功了。
等配置好后,会需要我们登录。那这个账号就是elastic超级管理员的账号登录了,密码忘记可以看3.1重新生成。
登陆后,大功告成!
这个其实没必要安装,像一些视频,博主啥的。还要下载node环境,下载项目啥的。谷歌浏览器有吧。谷歌商店(这要进不去,身为程序员反思下)能进去吧,搜索elasticsearch-head。下载浏览器插件就好了。
下载好之后打开插件页面,配置elasticsearch地址。认证就好了。账号密码就是elastic那个。
登录成功后。
其实elasticsearch8.x之后的java-api的命名空间(改为co.elastic.clients)与名字(改为elasticsearch-java)都改了。像什么RestHighLevelClient这些类也弃用了。取而代之的是ElasticsearchClient。
由于我们大部分都是使用springboot,这里就按照springboot集成。
我这里的springboot是2.7.0 。注意版本兼容,尽量与es服务版本相同。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-elasticsearchartifactId>
dependency>
<dependency>
<groupId>jakarta.jsongroupId>
<artifactId>jakarta.json-apiartifactId>
<version>2.0.1version>
dependency>
spring:
elasticsearch:
username: elastic
password: Zwpf5villae8_S+ZizxR
由于自动配置类,最高版本也没有兼容ElasticsearchClient。还是注入的RestHighLevelClient。所以我们这边自己配置注入ElasticsearchClient
/**
* 最新版已经弃用RestHighLevelClient。
* 同时所有操作类移动到co.elastic包下
* 该版本依赖不出意外是兼容到es8.x
*/
@Bean
ElasticsearchClient elasticsearchClient(RestClient restClient) {
// Create the Java API Client with the same low level client
ElasticsearchTransport transport = new RestClientTransport(
restClient,
new JacksonJsonpMapper()
);
return new ElasticsearchClient(transport);
}
我相信,能看到这篇文章的,Java都不弱。具体API,参考官网使用吧:
https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html