最后更新时间 2021-11-04
相关资源
官网:https://www.elastic.co/cn/
下载:https://www.elastic.co/cn/start
IK分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases (需要翻墙)
版本:elasticsearch-7.15.1
集群通信端口:9300
restful端口:9200
测试部署情况:http://localhost:9200
阿里云 ES 服务:https://www.aliyun.com/product/bigdata/elasticsearch
腾讯云 ES 服务:https://cloud.tencent.com/product/es
视频教程:https://www.bilibili.com/video/BV1hh411D7sb?p=1
分词器配置
注意分词器的版本需要和
elasticsearch
的版本匹配下载
elasticsearch-analysis-ik-7.15.1
解压缩后重命名analysis-ik
,整个拷贝到elasticsearch/plugins
目录重新启动
密码配置
https://www.elastic.co/guide/en/elasticsearch/reference/7.15/security-minimal-setup.html
进入 config
目录修改 elasticsearch.yml
,增加以下两个配置,开源版本默认是关闭的,并重新启动 es 服务
# 先配置密码,不要配置其他任何配置项,否则会启动报错
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
为4个用户分别设置密码:elastic, kibana, logstash_system,beats_system
# 自动设置密码
bin/elasticsearch-setup-passwords auto
# 手动设置密码
bin/elasticsearch-setup-passwords interactive
测试
curl localhost:9200
会出现错误提示curl localhost:9200 -u elastic:{password}
可正常访问
修改密码可以采用如下方式
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "1qaz5678" }'
如果忘记 elastic 用户的密码,重置密码过程如下:
修改
config/elasticsearch.yml
注释掉xpack.security.enabled: true
这一行重启ES,查看下索引,发现多了一个
.security-7
删除掉
.security-7
索引:curl -XDELETE http://localhost:9200/.security-7
到此就回到ES没有设置密码的阶段了,如果想重新设置密码,请重头开始参考本文。
IP、端口配置
进入 config
目录修改 elasticsearch.yml
#服务ip,否则默认 127.0.0.1
network.host: 0.0.0.0
#服务端口更改
http.port: port_number
启动命令
因为安全问题,不建议使用 root 用户运行 es,每个节点在 root 用户下创建新用户
#创建 es 用户
useradd es
#为 es 用户设置密码
passwd es
#如果错了,可以删除再加
userdel -r es
#授权
chmod -R 777 /app/elasticsearch-7.15.1
#如果是集群部署,需要处理文件夹所有者
chown -R es:es /opt/module/es-cluster
#切换用户
su es
#如果使用 es 账号启动,需要设置环境变量
export ES_JAVA_HOME=/usr/local/java/jdk-11.0.11
#前台启动
bin/elasticsearch
#后台启动
bin/elasticsearch -d
#查看端口 9200
netstat -nlpt
测试 http://localhost:9020/
错误处理
错误信息
ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lines before starting Elasticsearch.
bootstrap check failure [1] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
bootstrap check failure [2] of [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
配置内存
vim /etc/sysctl.conf
#在最上面增加一行
vm.max_map_count=262144
#使修改立即生效
sysctl -p
进入 config
目录修改 elasticsearch.yml
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
错误信息
[WARN ][o.e.t.OutboundHandler ] [dapuatecs-0006] send message failed [channel: Netty4TcpChannel{localAddress=/0:0:0:0:0:0:0:1:56092, remoteAddress=/0:0:0:0:0:0:0:1:9300, profile=default}]
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
关闭此配置项解决
#xpack.security.transport.ssl.enabled: true
错误信息
设置密码时报错,删除其他配置项,仅保留密码相关的两个配置项
Unexpected response code [503] from calling PUT http://172.16.0.182:8200/_security/user/apm_system/_password?pretty
Cause: Cluster state has not been recovered yet, cannot write to the [null] index
全部配置
基本配置信息全部汇总如下,注意不能一次性配置,必须先配置密码,自动生成密码后在增加其他配置项
#服务端口
http.port: 8200
#外网访问
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
#安全配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
基本概念
数据格式
对比关系型数据库,一条数据对应一个 json 文档
Elasticsearch | Index | Type | Document | Fields |
---|---|---|---|---|
MySQL | Database | Row | Column |
正排索引
id(pk/index) | content |
---|---|
1001 | zhang san |
1002 | li sa |
根据主键、索引查询速度快,普通内容 content 即使有索引 like 查询速度也不快
倒排索引
keyword | id |
---|---|
san | 1001,1002 |
zhang | 1001 |
li | 1002 |
根据 keyword 反向查找 id 返回记录
restful 接口
索引
创建索引
PUT /
查询索引
GET /
查询所有索引
GET /_cat/indices?v
删除索引
DELETE /
文档
创建文档,PUT 是幂等性的
POST/PUT /
body/json
创建文档,使用自定义 id
POST/PUT /
查询单个文档
GET /
查询全部文档
GET /
全量更新文档
PUT /
部分更新文档
POST /
body/部分json
删除文档
DELETE /
关键字
term
代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词解析,直接对搜索词进行查找。match
根据定义的分词器默认standar
对搜索词进行拆分,根据拆分结果逐个进行匹配。特点是可以查出大量可能相关联的数据,但是准确率低。match_phrase
短语匹配,同样会对搜索词拆分,但是所有拆分结果都必须包含,并且顺序一致,中间没有插入其他词语。特点是准确率高,但是最终匹配结果集较小。-
wildcard
通配符模式的模糊匹配,使用简单,但是性能较慢。
支持以下两种通配符:-
?
,匹配一个字符 -
*
,匹配零个或多个字符
官方建议:尽量避免在开头加通配符?
或者*
,这样会明显降低查询性能
-