Elasticsearch数据库

Elasticsearch数据库简介

Elasticsearch就是我们常说的es,是一个分布式的开源搜索和分析引擎,主要用于全文搜索、结构化搜索和分析。相信很多人对于es的概念都是ELK或者是EFK,用于日志的搜集存储用途,实际它的用途还可以用作是数据库,用来存储数据,因为它的搜索功能真的很好用。

Elasticsearch的特点和优势

- 拥有实时搜索、查询和分析功能,能够快速地对大量数据进行全文检索和复杂的分析查询。提供了丰富的查询 DSL,可以进行全文检索、结构化检索、地理位置检索等各种查询。 - 可以灵活数据建模,采用 schema-less 的设计,可以自动推断数据类型,并支持动态添加新字段。 - 强大的分析能力,es内置了强大的数据分析功能,如聚合、统计、机器学习等,可以快速获取数据洞察。 - 分布式架构,群集可以由一到多个节点构成,数据可以在多个节点间进行分片和复制,提高了系统的可扩展性和容错性。 - 易扩展性,可以轻松地进行水平扩展,通过增加节点来提高搜索吞吐量和存储容量。 - 高可用性,es提供了自动故障转移和数据恢复机制,保证了系统的高可用性。

TOC

★准备工作★

安装包下载地址:
Elasticsearch下载地址:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.16-linux-x86_64.tar.gz
Kibana下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.17.16-linux-x86_64.tar.gz
node下载地址:https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.gz
docker镜像版本:elasticsearch:7.17.16、kibana:7.17.16
服务器需要安装jdk环境

[root@es ~]# java -version
java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)

一、开始Elasticsearch的部署使用

es安装部署

注意:记得要先装好jdk环境,再进行安装部署es,否则启动会失败,es依赖jdk环境运行!!!
1.下载安装elasticsearch,创建工作目录

tar zxf elasticsearch-7.17.16-linux-x86_64.tar.gz
mv elasticsearch-7.17.16 /usr/local/elasticsearch
mkdir -p /usr/local/elasticsearch/{data,logs}

2.配置配置elasticsearch文件

vim /usr/local/elasticsearch/config/elasticsearch.yml
----------------------------------------
cluster.name: my-es #指定群集名字
network.host: 0.0.0.0 #允许外部 ip 访问
http.port: 9200 #设置监听端口
path.data: /usr/local/elasticsearch/data #数据存储目录
path.logs: /usr/local/elasticsearch/logs  #日志目录
xpack.security.enabled: false

3.创建用户并授权

groupadd es
useradd es -g es -p es
chown -R es.es /usr/local/elasticsearch

4.系统优化

vim /etc/security/limits.conf
---------------------------------
* soft nofile 65535  #最多只能打开65535个文件数,超过就会报警
* hard nofile 65535 #严格设定不允许超过
* soft nproc 4096
* hard nproc 4096
elk hard nofile 65536
elk soft nofile 65536

soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告
hard xxx : 代表严格的设定,不允许超过这个设定的值。
nofile : 是每个进程可以打开的文件数的限制
nproc : 是操作系统级别对每个用户创建的进程数的限制

vim /etc/sysctl.conf
---------------------
vm.max_map_count=655360
sysctl -p

5.使用es用户启动elasticsearch服务
注意:使用root用户启动会报错

su - es -c "/usr/local/elasticsearch/bin/elasticsearch -d"

当然也可以配置elasticsearch服务管理,这样更方便

cat > /usr/lib/systemd/system/elasticsearch.service << EOF
[Unit]
Description=elasticsearch server daemon
After=network.target sshd-keygen.target

[Service]
Type=simple
ExecStart=/usr/local/elasticsearch/bin/elasticsearch -d
ExecReload=kill -HUP $MAINPID
User=es
Group=es
LimitNOFILE=65535
LimitNPROC=65535
Restart=no
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

重新加载systemctl服务并启动服务

systemctl daemon-reload
systemctl enable --now elasticsearch

然后使用浏览器访问地址的9200端口就可以看到节点信息(如下图所示)
es.001

二、es语法学习

es的操作和其他的数据库大致相同,也是增删改查等等。
es存储的数据结构是以json的格式进行存储和操作。

基本查询操作

# 查看节点信息
GET /_cat/nodes?v=true&pretty
# 查看集群状态
GET /_cluster/health?pretty
# 以json格式并以MB为单位显示SIZE查看全部索引及信息
GET /_cat/indices?bytes=MB&s=index:asc&format=json
# 查看特定的字段,索引名,健康情况,文档名,统计数量,使用量大小
GET /_cat/indices?h=index,health,docs.count,store.size&format=json
# 统计索引中的文档数量
GET /{index_name}/_count

使用curl命令进行操作:

curl -u ${ES_USERNAME}:${ES_PASSWORD} -X GET "http://localhost:9200/_cat/nodes?v=true&pretty"

其实就是把前面的GET、PUT、POST、DELETE请求变成curl命令进行对应的请求,如果有用户名和密码则需要加上-u选项即可,后面的接口不变。

索引操作

索引字段类型

  • 字符串类型: keyword 关键字 关键词 、text 一段文本
  • 数字类型:integer long
  • 小数类型:float double
  • 布尔类型:boolean
  • 日期类型:date
    es索引操作语法:【方法】【/索引名】
    创建索引
PUT /{index_name}
{ 
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }, 
  "mappings": {
    "properties": {
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "created_at":{
        "type": "date"
      },
      "information":{
        "type": "text"
      }
    }
  }
}

使用curl命令:

curl -u ${ES_USERNAME}:${ES_PASSWORD} \
-X PUT "http://localhost:9200/{index_name}" \
-H "Content-Type: application/json" \
-d '{ 
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }, 
  "mappings": {
    "properties": {
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "created_at":{
        "type": "date"
      },
      "information":{
        "type": "text"
      }
    }
  }
}'

删除索引

DELETE /{index_name}

删除索引里面所有数据

POST /{index_name}/_delete_by_query
{
  "query": { "match_all": {} }
}

使用curl命令

curl -u ${ES_USERNAME}:${ES_PASSWORD} \
-X POST "http://localhost:9200/{index_name}/_delete_by_query" \
-H 'Content-Type: application/json' \
-d '{
  "query": {
    "match_all": {}
  }
}'

查询索引信息

# 查询索引信息
GET /{index_name}
GET /_cat/indices/{index_name}?v
# 查看索引设置信息
GET /{index_name}/_settings

文档操作

es文档操作语法:【方法】【/索引名】【/文档名】
创建文档

# 自动生成id
POST /{index_name}/_doc
{ "title":"macos", "price":8999.99, "created_at":"2024-06-28", "description":"apple电脑 13.3寸屏幕,8核CPU,16GB内存" }
# 设置id
PUT /{index_name}/_doc/1
{ "title":"macos", "price":8999.99, "created_at":"2024-06-28", "description":"apple电脑 13.3寸屏幕,8核CPU,16GB内存" }

删除文档

DELETE /{index_name}/_doc/1

更新文档

# POST方法,这种更新方式是先删除原始文档,再将更新文档以新的内容插入。
POST /{index_name}/_doc/1/_update
{ "description":"apple电脑 16寸屏幕,16核CPU,32GB内存" }
# PUT方法,这种方式可以将数据原始内容保存,并在此基础上更新。
PUT /{index_name}/_doc/1
{ "description":"apple电脑 16寸屏幕,16核CPU,32GB内存" }

查询文档

GET /{index_name}/_doc/1

批量操作文档

# 同时创建多个文档
PUT /{index_name}/_doc/_bulk
{"index":{}}
  { "title":"macos", "price":8999.99, "created_at":"2024-06-28", "information":"apple电脑 13.3寸屏幕,8核CPU,16GB内存" }
{"index":{}}
  { "title":"macos", "price":12999.99, "created_at":"2024-06-28", "information":"apple电脑 15.6寸屏幕,16核CPU,32GB内存" }
# 同时更新和删除文档
POST /{index_name}/_bulk
{ "create" : { "_index" : "my_index", "_id" : "3" }}
{ "title":"macos14", "price":13999.99, "created_at":"2024-06-29", "description":"apple电脑 16寸屏幕,32核CPU,64GB内存" }
{ "update" : { "_index" : "my_index", "_id" : "1" }}
{ "doc" : { "title":"macos", "price":8999.99, "created_at":"2024-06-28", "description":"apple电脑 15.6寸屏幕,16核CPU,32GB内存" }}
{ "delete" : { "_index" : "my_index", "_id" : "2" }}

三、工具安装使用

kibana部署使用

我们一般都会用kibana当作es的客户端使用,方便我们对es数据库进行增删改查等操作。
1.下载安装kibana

tar zxf kibana-7.17.16-linux-x86_64.tar.gz
mv kibana-7.17.16 /usr/local/kibana

2.创建用户并授权

groupadd kibana
useradd kibana -g kibana -p kibana
chown -R kibana:kibana /usr/local/kibana

3.修改kibana配置文件

vim /usr/local/kibana/config/kibana.yml
------------------------
# 服务端口
server.port: 5601
# 服务器ip  本机
server.host: "0.0.0.0"
# Elasticsearch 服务地址
elasticsearch.hosts: ["http://localhost:9200"]
# 设置语言为中文
i18n.locale: "zh-CN"

4.启动kibana服务

su - kibana -c "/usr/local/kibana/bin/kibana &"

当然也可以配置kibana服务管理,这样更方便

cat > /usr/lib/systemd/system/kibana.service << EOF
[Unit]
Description=Kibana
After=network.target

[Service]
Type=simple
User=kibana
Group=kibana
Environment="NODE_ENV=production"
Environment="KIBANA_PATH_CONF=/etc/kibana"
ExecStart=/usr/share/kibana/bin/kibana
Restart=always

[Install]
WantedBy=multi-user.target
EOF

重新加载systemctl服务并启动kibana服务

systemctl daemon-reload
systemctl enable --now kibana

然后使用浏览器访问地址的5601端口就可以访问kibana界面(如下图所示)
kibana.001
我们可以通过它的开发工具对es进行一系列的操作,比如增删改查等等(如下图所示)
kibana.002
我们只需要在界面上输入GET、PUT等语法即可操作(如下图所示)
kibana.003

Elasticsearch-head插件部署使用

这个插件是由node.js写的一个插件工具,安装部署很简单,可以方便我们对es进行一些操作,使用起来可以说是得心应手。
1.安装node.js

tar zxf node-v16.14.2-linux-x64.tar.gz
mv node-v16.14.2-linux-x64 /usr/local/node
ln -s /usr/local/node/bin/* /usr/bin

2.下载elasticsearch-head源码,打包安装并启动服务

git clone https://github.com/mobz/elasticsearch-head.git
npm install
npm start

出现以下信息则启动成功

[root@es ~]# npm start
......
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

3.如果需要修改elasticsearch配置文件

vim /usr/local/elasticsearch/config/elasticsearch.yml
-------------------------------
http.cors.enabled: true #支持跨域
http.cors.allow-origin: "*" #*表示所有域名

需要重启es服务生效

systemctl restart elasticsearch

我们可以访问地址的9100端口进行访问界面(如下图所示)
es-head.001
我们可以看到上面有很多操作按钮之类的,我们可以通过这些按钮对es进行一些操作(如下图所示)
es-head.002

测试阶段

我们尝试在kibana上创建一个索引,然后查看一下效果

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "content": {
        "type": "text"
      },
      "created_at": {
        "type": "date"
      }
    }
  }
}

创建索引(如下图所示)
es.002
查看索引(如下图所示)
es.003
我们也在elasticsearch-head插件上看一下(如下图所示)
es.004
以上就是我们es的一些简单部署使用和一些客户端工具的使用,就大功告成了。

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "content": {
        "type": "text"
      },
      "created_at": {
        "type": "date"
      }
    }
  }
}