环境
系统环境:centos7.0
远程链接工具:xshell
服务器:
elasticsearch-7.9.3
192.168.137.171
安装介绍
介绍
关系数据库⇒ 数据库⇒表⇒ 行⇒ 列(Columns)
Elasticsearch⇒ 索引(Index)⇒ 类型(type) ⇒ 文档(Docments)⇒ 字段(Fields)
环境系统
cenos7
jdk:1.8
elasticsearch:5.6.3
ip:192.168.137.161
下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.8.tar.gz
tar -zxvf elasticsearch-5.6.8 -C /opt
#创建地址
#数据
mkdir /opt/elasticsearch-5.6.8/data
#日志
mkdir /opt/elasticsearch-5.6.8/logs
yaml 配置
#集群名称
#cluster.name相同 自动组成集群
cluster.name: my-application
#节点名称
node.name: node-161
#数据地址
path.data: /opt/elasticsearch-5.6.8/data
#log日志
path.logs: /opt/elasticsearch-5.6.8/logs
#bootstrap.memory_lock: false
#bootstrap.system_call_filter: false
#配置域名 ip
network.host: 192.168.137.161
#端口号
http.port: 9200
#静态设置设置主机列表
discovery.zen.ping.unicast.hosts: ["192.168.137.161"]
执行
#创建用户组
groupadd elasticsearch
#创建用户并归属组
useradd elasticsearch -g elasticsearch -p elasticsearch
#改变elasticsearch文件夹所有者到当前用户
chown -R elasticsearch:elasticsearch /data0/es/elasticsearch-5.6.8
#切换用户
su elasticsearch
#启动
./elasticsearch
启动失败
修改elasticsearch.yml文件
bootstrap.memory_lock : false
修改/etc/security/limits.conf文件,增加配置,用户退出后重新登录生效
* soft nofile 65536
* hard nofile 65536
最大线程个数太低。修改配置文件/etc/security/limits.conf
* soft nproc 4096
* hard nproc 4096
修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
vi /etc/sysctl.conf
sysctl -p
请求:
curl -X GET "localhost:9200/_cat/health?v"
响应:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1533625274 15:01:14 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
我们可以看到,我们命名为“elasticsearch”的集群现在是green状态。
无论何时我们请求集群健康时,我们会得到green, yellow, 或者 red 这三种状态。
- Green : everything is good(一切都很好)(所有功能正常)
- Yellow : 所有数据都是可用的,但有些副本还没有分配(所有功能正常)
- Red : 有些数据不可用(部分功能正常)
从上面的响应中我们可以看到,集群"elasticsearch"总共有1个节点,0个分片因为还没有数据。
下面看一下集群的节点列表:
安装head插件
wget https://nodejs.org/dist/v12.18.0/node-v12.18.0.tar.gz
tar - zxvf node-v12.18.0 -C / /usr/local/node
下载地址
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D
wget --no-check-certificate https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
https 要在 wget 后面加上 --no-check-certificate
IK分词器下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.3/elasticsearch-analysis-ik-7.13.3.zip
熟悉目录
bin 启动文件
config 配置文件
log4j2 日志配置
jvm.options java虚拟机相关配置
elasticsearch.yaml elasticsearch 配置文件 默认端口 9200 跨域配置
lib 相关jar包
重新启动
ps -ef | grep elastic
kill -9 2382(进程号)
elasticsearch -d
外网访问问题
elasticsearch.yml`文件
network.host: 0.0.0.0
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
sudo vim /etc/sysctl.conf
添加
vm.max_map_count=655360
是否生效
sudo sysctl -p
设置 vim /etc/security/limits.conf
- soft nofile 65536
- hard nofile 65536
- soft nproc 4096
- hard nproc 4096
核心概念
对比
Db | ES |
---|---|
数据库(database) | 索引(indices) - 和数据库一样 |
表(tables) | types (慢慢弃用) |
行(rows) | documents - 文档 |
字段(columns) | fields |
就和数据库一样
物理设计
es 在后台把每个索引划分成多个分片 ,每一个分片可以在集群中的不同服务器间迁移
一个人就是一个集群 默认的集群名称就是elaticseath
关于文档的基本操作(重点)
简单分词
GET _analyze
{
"analyzer": "ik_smart",
"text": "中国共产党好"
}
更细分词
GET _analyze
{
"analyzer": "ik_max_word",
"text": "中国共产党好"
}
添加数据
PUT /test1/type1/1
{
"name": "陈大玉",
"age": 3
}
查看
GET test1
通过_cat 可以获得es当前的信息
##查看健康值
GET _cat/health
## 查看具体信息
GET _cat/indices?v
设置类型
PUT /test2
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
}
}
}
}
##查看
GET test2
PUT /test3/_doc/1
{
"name":"陈大大",
"age":13,
"birth":"1992-12-10"
}
## 查看数自动添加类型
GET test3
##修改数据 _update
POST /test3/_doc/1/_update
{
"doc":{
"name":"张三"
}
}
增加数据
PUT /qiyu/user/1
{
"name":"狂神说",
"age":23,
"desc":"一段操作猛如虎 一看工资2500",
"tags":["技术宅","温暖","指南"]
}
PUT /qiyu/user/2
{
"name":"陈宪玉",
"age":23,
"desc":"想做一个 厉害的程序员",
"tags":["技术宅","温暖","指南"]
}
PUT /qiyu/user/3
{
"name":"陈",
"age":23,
"desc":"哈哈",
"tags":["脾气不多","性格好","瘦"]
}
PUT 修改
## 多字段修改 不传字段会置空
PUT /qiyu/user/4
{
"name":"小虎宝",
"age":1,
"desc":"想做一个可爱的小孩子",
"tags":["可爱"]
}
GET /qiyu/user/4
单个字段修改
POST /qiyu/user/4/_update
{
"doc":
{
"name":"陈一蒙"
}
}
简单搜索
##简单搜索
##条件搜索
GET /qiyu/user/_search?q=name:一蒙
##复杂查询 select(排序 分页 高亮 模糊 精准查询)
GET qiyu/user/_search
{
"query":{
"match":
{
"name":"陈"
}
}
}
##结果过滤 _source 查询的字段
GET qiyu/user/_search
{
"query":{
"match":{
"name":"一"
}
},
"_source":["name","desc"]
}
查询排序
## 查询排序
GET qiyu/user/_search
{
"query":{
"match":{
"name":"陈"
}
},
"sort":[
{
"age":{
"order":"asc"
}
}
]
}
查询分页
## 查询分页 从第几条开始 form 显示多少size
GET qiyu/user/_search
{
"query":{
"match":{
"name":"陈"
}
},
"sort":[
{
"age":{
"order":"asc"
}
}
],
"form":0,
"size":1
}
must 并且
## must 命令 类似 and
GET qiyu/user/_search
{
"query":{
"bool":{
"must": [
{
"match": {
"name": "陈大玉"
}
},
{
"match":{
"age":23
}
}
]
}
}
}
should 或者
## should 命令相当于 or
GET qiyu/user/_search
{
"query":{
"bool":{
"should": [
{
"match":{
"name":"陈大玉"
}
},
{
"match":{
"age":1
}
}
]
}
}
}
must_not 不等于
## must_not 命令不等于
GET qiyu/user/_search
{
"query":{
"bool":{
"must_not": [
{
"match":{
"name":"陈大玉"
}
},
{
"match":{
"age":1
}
}
]
}
}
}
_score 查询参数
## _score 匹配度越高分值越高
GET qiyu/user/_search?q=name:陈
区间查询
## 区间范围相关的 filter gte 大于等于 lte 小于等于
GET qiyu/user/_search
{
"query":{
"bool":{
"filter":{
"range": {
"age": {
"gte": 0,
"lte": 20
}
}
}
}
}
}
## gt 大于
GET qiyu/user/_search
{
"query":{
"bool":{
"filter":{
"range": {
"age": {
"gt": 10
}
}
}
}
}
}
# lt 小于
GET qiyu/user/_search
{
"query":{
"bool":{
"filter": {
"range": {
"age": {
"lt": 4
}
}
}
}
}
}
多条件查询
## 多条件使用 空格隔开 只要满足一个结果就会被查出来
GET qiyu/user/_search
{
"query":{
"match": {
"tags": "我 可爱"
}
}
}
精确查询
、
## 精确查询
## term 查询是直接通过倒排索引指定的词条进行精确产找的
## 分词
## term 直接使用精确查找
## match 会使用分词器解析 (先分析文档 然后在通过分析的文档查询)
## 两种类型
## text 解析使用分词器
## keyword 不解析不使用分词器
## 没有被分析
GET _analyze
{
"analyzer": "keyword",
"text":"狂神说java name"
}
## 被拆分了
GET _analyze
{
"analyzer": "standard",
"text":"狂神说java name"
}
## 多条件精确查找
GET qiyu/user/_search
{
"query":{
"bool": {
"should": [
{
"term": {
"name": "陈一蒙"
}
},
{
"term": {
"age": 1
}
}
]
}
}
}
高亮查询
## 高亮查询 highlight
GET qiyu/user/_search
{
"query":{
"match": {
"name": "陈"
}
},
"highlight":{
"pre_tags": "<p class='key' style='coler:red'>",
"post_tags": "</p>",
"fields": {
"name":{}
}
}
}