环境搭建
版本选择
- Java
1.8.0_131
, 系统已安装 - Elasticsearch
7.10.2
, 阿里云目前推荐使用 7.10 版本, 这是 7.10.x 的最后一个版本. 由于系统已安装 Java, 因此选择 No JDK 模式 - Kibana
7.10.2
, 只在本地 Mac 电脑上体验了一下, 服务器上, 资源有限, 没有安装
Elasticsearch
从官网下载 Elasticsearch No JDK 7.10.2, 移到 /opt
目录下, 解压缩并执行
tar -xkzvf elasticsearch-7.10.2-no-jdk-darwin-x86_64.tar.gz
cd elasticsearch-7.10.2/bin
./elasticsearch
# 后台执行
nohup ./elasticsearch -d &
关闭服务
# 获取 Elasticsearch 进程号
jps
kill -9 进程号
Elasticsearch Head
查看 ES 信息的轻量级 Chrome 插件
Kibana
从官网下载 Kibana 7.10.2, 移到 /opt
目录下, 解压缩并执行
tar -xkzvf kibana-7.10.2-darwin-x86_64.tar.gz
cd kibana-7.10.2-darwin-x86_64/bin
./kibana
启动好以后, 进入 http://localhost:5601/app/dev_tools#/console
CentOS 搭建 ES 7.10.2
- 不能用
root
账号, 比如我用的是自己的账号henry
. - 下载
elasticsearch-7.10.2-no-jdk-linux-x86_64.tar.gz
放到/opt
目录下 - 解压缩
tar -xkzvf elasticsearch-7.10.2-no-jdk-linux-x86_64.tar.gz
- 取消对应行的注释, 参考如下配置
config/elasticsearch.yml
node.name: node-1
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
- 配置
config/jvm.options
, 默认为-Xms1g -Xmx1g
, 修改为如下
-Xms512m
-Xmx512m
多节点集群配置
node-1
节点新增如下三条配置, 复制到 node-2
节点, 仅修改 node.name: node-2
即可.
cluster.name: ut-es-dev
discovery.seed_hosts: ["xxx.xxx.xxx.xxx:9300", "xxx.xxx.xxx.xxx:9300"]
cluster.initial_master_nodes: ["node-1", "node-2"]
启动以后的效果如下
添加安全认证
- 生成证书, 命令如下, 第一个回车, 不用管; 第二个输入密码.
./bin/elasticsearch-certutil ca
- 生成秘钥, 命令如下, 中间需要输入上一步的密码; 需要输入路径的地方可直接回车.
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- 将凭证迁移到指定目录
mkdir -pv config/certificates
mv elastic-stack-ca.p12 config/certificates
chmod 600 elastic-certificates.p12
- 修改配置文件, 编辑
config/elasticsearch.yml
, 增加如下配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certificates/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certificates/elastic-certificates.p12
- 在各个节点上添加密码, 即第一步中设置的密码
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
- 启动节点
./bin/elasticsearch -d
- 设置密码, 下面会要输入很多密码, 都要记住, 以后会用到
./bin/elasticsearch-setup-passwords interactive
- 浏览查看 9200 端口, 比如用 ElasticSearch Head 访问
http://[ip]:9200
.
基本用法
添加依赖
Spring Boot 2.2.6.RELEASE 依赖的 ElasticSearch 版本号为 6.8.7
, 由于 ES 服务端安装版本为 7.10.2, 因此需要手动修改属性值
<properties>
<elasticsearch.version>7.10.2</elasticsearch.version>
</properties>
添加依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
配置客户端
参考 org.enthusa.hey.config.EsConfig
@Bean
public RestHighLevelClient restHighLevelClient() {
HttpHost[] httpHosts = Stream.of(globalSetting.getEsHosts().split(",")).map(host -> new HttpHost(host, globalSetting.getEsPort(), "http")).toArray(HttpHost[]::new);
RestClientBuilder builder = RestClient.builder(httpHosts);
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "qwaszx"));
builder.setHttpClientConfigCallback(h -> h
.disableAuthCaching()
.setDefaultCredentialsProvider(credentialsProvider));
builder.setRequestConfigCallback(r -> r
.setConnectTimeout(-1)
.setSocketTimeout(-1)
.setConnectionRequestTimeout(-1));
return new RestHighLevelClient(builder);
}
创建搜索服务
- 定义索引名模式常量,
Consts
- 扩展
AbstractSearchService
类, 实现getIndexName
,buildIndex
,buildQuery
- 定义 mappings json 文件
- 全量索引与增量索引
index
- Controller 中构造
QueryBuilder
, 进行搜索