elasticsearch:7.7.1 使用详解(基于centos7笔记)

elasticsearch:7.7.1 使用详解(基于centos7笔记)

目录:


elasticsearch(非Docker安装)
  1. 目录介绍
  2. 配置文件配置
  3. 启动
  4. ik分词器安装
elasticsearch(Docker安装)
  1. elasticsearch安装启动
  2. kibana安装配置
  3. 可视化界面补充
elasticsearch数据结构和基本原理
elasticsearch基本 API 命令
  1. 创建文档
  2. 创建索引
  3. 查看索引默认信息
  4. 查看索引详细信息
  1. 添加数据
  2. 修改、删除数据
  3. 查询数据
  4. 高亮显示

elasticsearch(非Docker安装)



下载解压


过程不再多说了,直接镜像网站下载 .gz 包然后解压

华为镜像


elasticsearch目录介绍



在这里插入图片描述

bin 启动文件
config 配置文件
log4j2 日志配置文件
jvm.options java虚拟机参数配置
elasticsearch.yml elasticsearch的配置文件,默认9200端口,可能会涉及到跨域问题
lib 相关jar包
logs 日志
modules 功能模块
plugins 比如ik分词器


配置elasticsearch配置文件


1. elasticsearch本身配置文件配置

config目录下:

  • jvm.options:配置堆内存,Xms=256m Xmx=256m(可以根据自己的电脑性能来进行配置)

  • elasticsearch.yml配置文件中配置你的ip,这样的话可以让外网进行访问

在这里插入图片描述

2. elasticsearch对系统的配置同样也是有着苛刻的要求

2.1 首先对系统最大文件数量有要求(65536)

编辑配置文件

vi /etc/security/limits.conf

添加配置

* soft nofile 65536
* hard nofile 65536

然后重启linux或者重新登录 su root 或者其他用户使得配置文件生效

2.2 接着,对最大的线程同样有着要求(262144)

编辑配置文件

vi /etc/sysctl.conf

进行参数配置

vm.max_map_count=262144

最后使得配置生效

sysctl -p

3. 跨域的配置

config目录下的elasticsearch.yml配置跨域设置

# 设置全部ip都可以进行跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

在这里插入图片描述


启动elasticsearch


这个时候,elasticsearch启动不允许在root用户状态下面启动,需要在非root用户下启动,所以我们有需要有额外的配置了。

1. 我们先关闭防火墙,进行访问测试

systemctl stop firewalld
systemctl disable firewalld

2. 我们创建用户

groupadd es
useradd es -g es
chown -R es:es ./elasticsearch-7.7.1

3. 切换用户

su es

4. 进入bin目录进行启动

./elasticsearch

如果需要后台启动的话是下面这个命令

./elasticsearch -d 

5. 访问效果如下

在这里插入图片描述


插件的安装(ik分词器)


1. 新建⽬录ik并且将分词器解压在这个目录下

cd /opt/elasticsearch/elasticsearch-7.7.1/plugins/elasticsearch-analysis-ik-7.7.1
mkdir ik
cd ik

2. 根据自己的版本选择对应的ik分词器,下面是官网的地址

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.1//elasticsearch-analysis-ik-7.7.1.zip
unzip elasticsearch-analysis-ik-7.7.1.zip

3. 启动后会有以下的效果

在这里插入图片描述

也可以通过下面的命令进行查看

elasticsearch-plugin list
[root@aa30c6c3d444 elasticsearch]# elasticsearch-plugin list
ik

4. 进入我们的kibana查看分词器的效果(如果没有安装图形界面请参照下面的教程)

GET _analyze
{
    "analyzer":"ik_smart",
    "text":"中国共产党"
}

在这里插入图片描述

最大拆分

GET _analyze
{
    "analyzer":"ik_max_word",
    "text":"中国共产党"
}

在这里插入图片描述

没有被拆分

GET _analyze
{
    "analyzer":"keyword",
    "text":"中国共产党"
}

在这里插入图片描述

标准拆分

GET _analyze
{
    "analyzer":"standard",
    "text":"中国共产党"
}

在这里插入图片描述

elasticsearch(Docker安装)


elasticsearch安装启动


话不多说,你只要安装了docker,下面一条命令就可以搞定了,配置一下内存(根据你的机器来配置)

如果没有安装,请参照网址

docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 \
-v elasticsearch7.0:/usr/local/elasticsearch \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.7.1

kibana安装启动


docker run \
-it \
--name kibana \
 -p 5601:5601 \
kibana:7.7.1 \
bin/bash

进入命令行配置kibana的配置文件

[root@iZ2ze1ycujbqzy1mnrzufbZ ~]# docker exec -it 3b239fff5b6e /bin/bash
bash-4.2$ ls  
kibana.yml
bash-4.2$ vi kibana.yml 
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://59.110.213.92:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

然后我们直接通过:http://你的ip:5601 进行访问


可视化界面的安装的补充


1. 我们可以选择head插件

这里需要一些前端的安装环境

如果没有git,直接进行下载

yum install git
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open http://localhost:9100/

连接测试,需要配置我们elasticsearch的跨域

2. ElisticHD,更加可视化的界面

这里我们演示docker安装

docker run \ 
-p \ 
9200:9200 \
-d \ 
--name elasticsearch01 \
elasticsearch
docker run \
-p 9800:9800 \
-d \
--link elasticsearch01 \
containerize/elastichd

在这里插入图片描述

elasticsearch数据结构和基本原理


数据结构


在这里插入图片描述

这里和MySQL有着非常相似的关系

database --> indices 索引
tables --> types 类型(这个可能描述的不太准确,type更加类似于java中的class)
rows --> documents 文档
columns --> field 字段


启动elasticsearch之后就是以集群的方式进行工作


elasticsearch把后台的每个索引划分为了多个分片,每个分片可以在集群中的不同服务器间迁移。所以我们一开始就是搭建了一个集群,虽然看上去是单机的安装。

在这里插入图片描述

一个集群至少有一个节点,一个节点就是一个elasticsearch进程,节点可以有多个索引,如果你创建了一个索引,那么索引将会有5个分片,每一个主分片都会有一个副本。

在这里插入图片描述

elasticsearch基本 API 命令


在这里插入图片描述


入门命令演示


1. 创建一个文档

PUT /索引名/类型名/文档id {请求体}

PUT /test/type1/1
{
    "name":"zhangsan",
    "age":3    
}

在这里插入图片描述

2. 创建一个索引

PUT /test2
{
    "mappings":{
        "properties":{
            "name":{
                "type":"text"
            },
            "age":{
                "type":"long"
            },
            "birthday":{
                "type":"date"
            }
        }
    }
}

在这里插入图片描述

GET test2

在这里插入图片描述

3. 查看默认信息

PUT /test3/_doc/1
{
    "name":"zhangsan",
    "age":21,
    "birth":"1997-01-05"
}

在这里插入图片描述

GET test3

在这里插入图片描述

4. 获取索引详细信息




GET _cat/indices?v

在这里插入图片描述


数据类型


字符串类型
text 、 keyword
数值类型
long, integer, short, byte, double, float, half_float, scaled_float
日期类型
date
PUT /索引名/类型名/文档id {请求体}
te布尔值类型
boolean
二进制类型
binary
等等…


命令进阶


增加数据

1. 添加数据

PUT /alibaba/user/1
{
    "name":"zhangsan",
    "age":21,
    "desc":"我是张三",
    "tags":["开发","专家"]
}

在这里插入图片描述

PUT /alibaba/user/2
{
    "name":"lisi",
    "age":22,
    "desc":"我是李四",
    "tags":["jvm","docker"]
}

在这里插入图片描述

2. 数据获取 GET

GET /alibaba/user/1

在这里插入图片描述

GET /alibaba/user

在这里插入图片描述


修改数据,删除数据

1. 更新数据 PUT

PUT /alibaba/user/1
{
    "name":"zhangsan:new",
    "age":21,
    "desc":"我是张三",
    "tags":["开发","专家"]
}

在这里插入图片描述

GET /alibaba/user/1

在这里插入图片描述

2. 更灵活的更新方式(推荐使用) POST _update

POST /alibaba/user/1/_update
{
    "doc":{
        "name":"ZHANGSAN:new"
    }
}

在这里插入图片描述

GET /alibaba/user/1

在这里插入图片描述


查询数据

1. 简单搜索

GET /alibaba/user/1

2. 条件查询

GET /alibaba/user/_search?q=name:lisi

在这里插入图片描述

3. 复杂条件查询

3.1 通过字段进行过滤

GET alibaba/user/_search
{
    "query":{
        "match":{
            "name":"lisi"
        }
    }
}

在这里插入图片描述

3.2 对字段结果进行过滤,返回部分字段

GET alibaba/user/_search
{
    "query":{
        "match":{
            "name":"lisi"
        }
    },
    "_source":["name","desc"]
}

在这里插入图片描述

3.3 对结果进行排序

GET alibaba/user/_search
{
    "sort":[
        {
            "age":{
                "order":"asc"
            }
        }   
    ]   
}

在这里插入图片描述

3.4 分页查询

GET alibaba/user/_search
{
    "from":0,
    "size":1 
}

在这里插入图片描述

3.3 布尔查询,逻辑判断查询(& | !)

bool 表示返回满足所有条件的结果

must 表示 and(&)
should 表示 or(|)
must_not 表示 not(!)

GET alibaba/user/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "name":"lisi"
                            }       
                },
                {
                    "match":{
                        "age":"21"
                            }       
                }   
                ]
            }
    }
}

在这里插入图片描述

GET alibaba/user/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "name":"lisi"
                            }       
                },
                {
                    "match":{
                        "age":"22"
                            }       
                }   
                ]
            }
    }
}

在这里插入图片描述

3.4 过滤器(< > =)

类似于比较运算符

gt 大于
gte 大于等于
lt 小于
lte 小于等于

GET alibaba/user/_search
{
    "query":{
        "bool":{
            "filter":{
                "range":{
                    "age":{
                        "gt":20,
                        "lt":22
                        }
                    }
                }
            }
    }
}

在这里插入图片描述

4. 精确查询

term查询时直接通过倒排索引指定的词条进程精确查找的

  • term,直接查询精确的

  • match,会使用分词器解析(先分析文档,然后在分析的结果中进行查询)

多个词精确匹配

GET /alibaba/user
{
    "query":{
        "bool":{
            "should":{
                "term":{
                    "age":"22"
                },
                "term":{
                    "age":"21"
                }
            }
        }
    }    
}

分词分析后在进行分析(就是经过了我们的ik分词器分词之后再对分词之后的结果进行查询)

GET alibaba/user/_search
{
    "query":{
        "match":{
            "desc":"李"
        }
    },
    "_source":["name","desc"]
}

在这里插入图片描述

5. 高亮查询

5.1 默认高亮显示

GET alibaba/user/_search
{
    "query":{
        "match":{
            "desc":"李"
        }
    },
    "highlight":{
        "fields":{
            "desc":{}
        }
    },
    "_source":["desc"]
}

在这里插入图片描述

5.2 自定义高亮显示

GET alibaba/user/_search
{
    "query":{
        "match":{
            "desc":"李"
        }
    },
    "highlight":{
        "pre_tags":"<p class='key' style='color:red'>",
        "post_tags":"</p>",
        "fields":{
            "desc":{}
        }
    },
    "_source":["desc"]
}

在这里插入图片描述

6. 关于MySQL和elasticsearch

其实elasticsearch的这些功能MySQL都可以实现,但是只不过效率会比较的低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值