ElasticSearch 核心笔记(持续更新)

最后更新时间 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 Table 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 //_doc

body/json

创建文档,使用自定义 id

POST/PUT //_doc/

查询单个文档

GET //_doc/

查询全部文档

GET //_search

全量更新文档

PUT //_doc/

部分更新文档

POST //_update/

body/部分json

删除文档

DELETE //_doc/

关键字

  • term
    代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词解析,直接对搜索词进行查找。

  • match
    根据定义的分词器默认 standar 对搜索词进行拆分,根据拆分结果逐个进行匹配。特点是可以查出大量可能相关联的数据,但是准确率低。

  • match_phrase
    短语匹配,同样会对搜索词拆分,但是所有拆分结果都必须包含,并且顺序一致,中间没有插入其他词语。特点是准确率高,但是最终匹配结果集较小。

  • wildcard
    通配符模式的模糊匹配,使用简单,但是性能较慢。
    支持以下两种通配符:

    • ?,匹配一个字符
    • *,匹配零个或多个字符
      官方建议:尽量避免在开头加通配符 ? 或者 *,这样会明显降低查询性能

你可能感兴趣的:(ElasticSearch 核心笔记(持续更新))