SpringBoot整合ElasticSearch(一)

概念

首先我们要使用SpringBoot整合ES我们先要明白ES是什么?它主要是为了干什么?
ES是一个基于Lucene的搜索服务器,它是一个分布式、高扩展、高实时的搜索与数据分析引擎.同时它还是一个基于RESTful web接口.简单来说,就是ES就是为了解决我们上亿条数据查询速度缓慢的一种技术.能够提高我们的查询数据的效率.
我们想要使用这个搜索服务器,当然我们先得安装这个服务器了,不然你用个锤子啊!

安装

  1. 上传ElasticSearch安装包
put e:/software/elasticsearch-7.4.0-linux-x86_64.tar.gz
  1. 执行解压操作
tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz  -C /opt
  1. 创建普通用户. 因为安全问题,Elasticsearch 不允许root用户直接运行,所以要创建新用户,在root用户中创建新用户,执行如下命令:
useradd qishen  # 新增qishen用户
passwd  123456 # 为qishen用户设置密码
  1. 为新用户授权
chown -R qishen:123456 /opt/elasticsearch-7.4.0 #文件夹所有者

将 /opt/elasticsearch-7.4.0文件夹授权给qishen用户,由上图可见,我们的文件夹权限赋给了qishen

  1. 修改elasticsearch.yml文件
vim /opt/elasticsearch-7.4.0/config/elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"] 

cluster.name:配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称

node.name:节点名,elasticsearch会默认随机指定一个名字,建议指定一个有意义的名称,方便管理

network.host:设置为0.0.0.0允许外网访问

http.port:Elasticsearch的http访问端口

cluster.initial_master_nodes:初始化新的集群时需要此配置来选举master

  1. 修改配置文件
    新创建的qishen用户最大可创建文件数太小,最大虚拟内存太小,切换到root用户,编辑下列配置文件, 添加类似如下内容
# 切换到roo`在这里插入代码片`t用户
su root 

#1. ===最大可创建文件数太小=======
vim /etc/security/limits.conf 
# 在文件末尾中增加下面内容
qishen soft nofile 65536
qishen hard nofile 65536
# =====
vim /etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
qishen soft nofile 65536
qishen hard nofile 65536
*  hard    nproc     4096
# 注:* 代表Linux所有用户名称	

#2. ===最大虚拟内存太小=======
vim /etc/sysctl.conf
# 在文件中增加下面内容
vm.max_map_count=655360
# 重新加载,输入下面命令:
sysctl -p

  1. 启动elasticsearch
su qishen  # 切换到itheima用户启动
cd /opt/elasticsearch-7.4.0/bin
./elasticsearch #启动

我们启动完成之后,就可以去访问我们的ES,我们是否已经安装成功了,不过我们在访问之前一定要保证虚拟机上的防火墙是关掉的,不让就会被拦截,不能被访问。

#暂时关闭防火墙
systemctl  stop  firewalld

# 或者

#永久设置防火墙状态
systemctl enable firewalld.service  #打开防火墙永久性生效,重启后不会复原 
systemctl disable firewalld.service #关闭防火墙,永久性生效,重启后不会复原 

浏览器输入http://192.168.149.135:9200/,如果出现下面的就说明访问成功了。
在这里插入图片描述

以上就是我们的ES安装,我们虽然已经安装好了服务端的ES,按道理已经可以使用了,但是我们直接这样查看我们的数据是相当不方便的,所以一般情况下我们都会通过客户端去访问我们ES中存的内容,这样就会方便很多。一般可以用来操作ES的客户端有:PostMan和Kibana还有head,但是一般情况我们都用kibanna,Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。而且它很方便。下面我们先介绍一下这个平台安装:

  1. 第一步也是先要去下载安装包,然后上传:
put ‪E:\software\kibana-7.4.0-linux-x86_64.tar.gz
  1. 第二步解压 步骤都是一样的。
tar -xzf kibana-7.4.0-linux-x86_64.tar.gz -C /opt
  1. 修改配置
vim /opt/kibana-7.4.0-linux-x86_64/config/kibana.yml


server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana-itcast"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
elasticsearch.requestTimeout: 99999

server.port:http访问端口

server.host:ip地址,0.0.0.0表示可远程访问

server.name:kibana服务名

elasticsearch.hosts:elasticsearch地址

elasticsearch.requestTimeout:请求elasticsearch超时时间,默认为30000,此处可根据情况设置

  1. 启动kibanna
    由于kibana不建议使用root用户启动,如果用root启动,需要加–allow-root参数
# 切换到kibana的bin目录
cd /opt/kibana-7.4.0-linux-x86_64/bin
# 启动
./kibana --allow-root
  1. 访问

浏览器输入http://192.168.149.135:5601

Discover:可视化查询分析器
Visualize:统计分析图表
Dashboard:自定义主面板(添加图表)
Timelion:Timelion是一个kibana时间序列展示组件(暂时不用)
Dev Tools:Console控制台(同CURL/POSTER,操作ES代码工具,代码提示,很方便)
Management:管理索引库(index)、已保存的搜索和可视化结果(save objects)、设置 kibana 服务器属性。

这就安装成功了,是不是感觉简单啊,没错,就是很简单,步骤都是大差不差。我们安装完了就可以操作了,其实这个操作分为两种方式。一种是基于脚本的方法操作,一种是基于JavaAPI的方式。

ES核心概念

我们在学习ES应该是有对比的学习,首先它有三大核心:索引(就相当于我们数据库中的表)、映射(相当于于表结构)、文档(相当于表中的一行数据)。
里面还有一个比较重要的概念:倒排索引
== 一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的文档id列表。==

首先我们要先看ES得脚本操作,一般客户端使用GET、POST、PUT、DELETE 4个表示操作方式的动词对服务端资源进行操作:
GET:用来获取资源
POST:用来新建资源(也可以用于更新资源)
PUT:用来更新资源
DELETE:用来删除资源

首先我们介绍一下关于数据类型有哪些?

  1. 字符串
    有两种方式
    第一种:text类型的,会分词但是不支持聚合.
    第二种:keyword类型,不会分词,支持聚合
  2. 数值
    布尔:boolean.
    二进制:binary
    范围类型:integer_range, float_range, long_range, double_range, date_range
    日期:date
  3. 复杂数据类型
    数组:[ ],对象{}

由于我们使用Postman作为客户端跟kibana不一样,这里我就只介绍kibana的使用,主要是用来使用脚本语言操作的

索引(相当于数据库表):

  1. 添加索引
PUT 索引名称
  1. 查询索引
GET  /索引名称				 #查询单个索引信息
GET  /索引名称1,索引名称2...	   #查询多个索引信息
GET  /_all					#查询所有索引信息
  1. 删除索引
DELETE /索引名称
  1. 关闭索引
POST  /索引名称/_close  
  1. 打开索引
POST  /索引名称/_open

映射(相当于表结构):

  1. 添加索引
PUT /索引名/_mapping
{
    "properties":{
        "属性名":{
            "type": "属性类型",
            "analyzer": "分词类型"
        },
        "属性名":{
        	"type": "属性类型"
        }
    }
} 
  1. 创建索引并添加映射
PUT /索引名
{
  "mappings": {
    "properties": {
      "属性名": {
        "type": "属性类型"
      },
      "属性名": {
        "type": "属性类型"
      }
    }
  }
}

操作文档(相当于 表中数据):

  1. 添加文档,指定id
POST /索引名/_doc/id号
{
  "属性名":"属性值",
  "属性名":属性值,
  "属性名":"属性值"
}
  1. 添加文档,不指定id
#添加文档,不指定id(系统会随机ID)
POST /索引名/_doc/
{
  "属性名":"属性值",
  "属性名":属性值,
  "属性名":"属性值"
}
  1. 查询指定文档
GET /索引名/_search/指定ID
  1. 查询所有文档
GET /索引名/_search
  1. 删除指定id文档
DELETE /索引名/_doc/1

以上就是关于使用脚本操作ES的内容,但是因为ES是外国人弄得,所以他对中文的分词支持的不好,会将每个汉字都弄成一个词,这明显是不行的。所以,这里再说一个分词器的东西 ,这个东西可以 让我们的ES进行分词的时候能够按照字典的形式进行分词操作,这样就能满足我们的需求

因为这个是 一个插件,所以是需要我们进行安装的。

下面就说关键点了:

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词。是一个基于maven的项目。
下载地址为:https://github.com/medcl/elasticsearch-analysis-ik/archive/v7.4.0.zip

下载完成后,我们要对这个项目进行打包

mvn package
# 如果打包出错了 ,可能是我们现在的镜像地址不行,可以选择换成阿里的镜像地址
在maven的settings.xml配置文件中添加下面的话就行了 如果没有问题 可以忽略下方操作
<mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

ik分词器使用

它有两种模式,ik_max_wordik_smart模式。

ik_max_word:做细粒度的拆分,对于中华人民共和国。会拆分成:中、中华 中华人 、人民、人民共和国、共和国。
ik_smart:做粗粒度的拆分,会拆成:中华、人民、共和国

上面就是举例子,不要较真啊 O(∩_∩)O

操作:

#方式一ik_max_word
GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "中华人民共和国"
}
#方式二ik_smart
GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "中华人民共和国"
}

使用ik分词器-查询文档

  • 词条查询:term
    词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时才匹配搜索
  • 全文查询:match
    全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集
  1. 创建索引,添加映射,并指定分词器为ik分词器
PUT person2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "address": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}
  1. 添加文档
POST /person2/_doc/1
{
  "name":"张三",
  "age":18,
  "address":"北京海淀区"
}

POST /person2/_doc/2
{
  "name":"李四",
  "age":18,
  "address":"北京朝阳区"
}

POST /person2/_doc/3
{
  "name":"王五",
  "age":18,
  "address":"北京昌平区"
}

  1. 查询映射
GET person2
  1. 查看分词效果
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "北京海淀"
}

  1. 词条查询:term
    查询person2中匹配到"北京"两字的词条
GET /person2/_search
{
  "query": {
    "term": {
      "address": {
        "value": "北京"
      }
    }
  }
}
  1. 全文查询:match
    全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集
GET /person2/_search
{
  "query": {
    "match": {
      "address":"北京昌平"
    }
  }
}

基础操作大概就这些了 后面说 与java代码结合如何操作,希望这些对大家 有所帮助。

记得多动手
SpringBoot整合ElasticSearch(二)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值