ElasticSearch7.x 从部署到开发

本文是关于ElasticSearch7.x的入门教程,特别是如何在SpringBoot项目中对接ElasticSearch。内容涵盖ES的核心概念如倒排索引、分词器,以及ES的部署、基础使用和SpringBoot的对接步骤。文中还提醒了对接过程中需要注意的分词器一致性问题。
摘要由CSDN通过智能技术生成

ElasticSearch7.x入门文档!SpringBoot项目如何对接ElasticSearch?Spring-data-elasticsearch-2.7.5新版api全网唯一使用教程!

由于公司新开项目,需要接入ElasticSearch,而公司内部配置ElasticSearch为新版7.17.0,自己之前也没有学习过ElasticSearch的使用,就直接使用了新版的Spring-data-elastic-2.7.5框架对接,这时候才发现新版spring-data-elasticsearch的api较之老版有很大的改动,而且还有一些坑爹的漏洞,网络上相关的文档也是少之又少,于是在此总结一下个人学习中的一些经验,供各位参考,个人能力有限,只是总结一些基础的使用,错误之处应当不少,还望各位积极指出。

1. 核心概念

ElasticSearch是基于Lucene搜索引擎开发的分布式搜索和分析引擎,其内部核心原理可参考我上一篇Lucene的学习笔记:Lucene笔记。其关键概念有一下几点。

ES数据结构

ES的数据结构与常见的数据库结构类似,只是名称概念不同。

  1. Index,翻译过来是索引,但是其本质类似于数据库中的表或者库,因为ES没有特定的数据结构,所以对数据没有表粒度的拆分,Index作为存储数据的库直接存储所有数据。
  2. Document,文档,可对应于数据库表中的每一行数据,每一次往ES 中插入一条数据,就视作插入一个文档。
  3. Field,域。类似于数据库中字段的概念,一个域就是一个约定的字段,但是插入创建Index时没有指定的域也不会报错

倒排索引

既然学习ES,我们首先就得知道ES使用来干嘛的。众所周知,ES是用于大数据量情况下的条件搜索服务,主要功能是基于内容搜索匹配的数据,也就是说,ES是专供于模糊搜索的。这对于结构化数据多用于精确搜索的概念就恰恰是一体两面性。Mysql利用结构化数据,常用于提供精确化的搜索,找到内容, 其核心逻辑体现类似于 id -> content,利用Id查询到唯一内容;而ES利用倒排索引,通过查询条件找到匹配的数据id集合,再找到相匹配的数据,核心逻辑类似于 keyWord -> ids,通过关键词找到大量包含片段的Id集合。
在这个过程中,我们就有了倒排索引的概念,在ES存储数据的同时,我们将数据每个域的内容利用分词器进行切分,分成不同的片段内容——即关键词,然后关键词作为id,文档id作为value存入倒排索引库。
比如我们有一个数据(id为es内部的文档id)

{
	“id:1,
	"name" : "苹果手机”
}

在插入es时,我们就会根据配置分词器的规则,对name字段进行分词,分为“苹果”和“手机”,那么在es里就有这样的倒排索引结构:

name: {
苹果:[1]
手机: [1]
“苹果手机” :[1]

}

然后我们再插入一条

{
	“id:2,
	"name" : "苹果电脑”
}

此时我们倒排索引的结构就会变成

name:{
	苹果:[1,2]
	手机:[1]
	电脑:[2]
	“苹果手机” :[1]
	“苹果电脑“ :[2]
}

这个时候如果我们搜索“苹果”,倒排索引里面就会查询到id集合“1,2“,然后根据id的到最终的数据,这个过程相当于两次主键查询,速度相对于Mysql的模糊查询就是非常快的。

分词器

分词器即我们存储查询时候的分词逻辑,即怎么分词,每个分词器的分词效果可能都不相同。默认的分词器对于中文的分词一般是一个字一分,对于“苹果手机”可能会分词成“苹”“果”“手”“机”四个关键词,生成四个倒排索引,而中文分词器可能就会分成“苹果”“手机”"苹果手机”三个关键词。
因此,在查询的时候,我们必须保证与入库的分词器一致,当你入库选择默认生成了上述四个关键词后,而我们查询时却是用了IK分词器,那么当我们用“苹果”“和”手机“两个关键字去倒排索引库里查询对应的id时,我们无法得到结果,反而搜索不到数据。

2 ElasticSearch的部署

作为一个专业的程序员,自然是以Linux为例来讲解啦,没有自己的服务器的话,阿里云服务器新用户优惠可了解一下。

  1. 第一步,创建ES的操作账号,这一点非常重要!!!
    作为我三番五次踩的一个大坑,这个重点强调。ES内部的设置,你是无法用root账户启动es的。所以首先创建一个ES的用户,剩下后续一切数据权限的困扰。
useradd user-es #创建用户
passwd espassword #设置密码
  1. 第二步,下载ES安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
  1. 第三步,解压
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz -C /usr/local/es
  1. 修改配置项./config/elasticsearch.yml,主要有这么几个点要注意
cluster.name: 设置集群的名字
node.name: 设置当前节点的名字
network.host: 0.0.0.0 (允许访问的ip,需要打开配置成0.0.0.0代表支持任意ip访问)
http.port: 9200 端口号
cluster.initial_master_nodes: ["主节点名称"] (单机部署时也需要配置,写入当前节点的名称)
  1. 然后进入./bin目录下,后台启动,访问对应9200端口号,如果有返回代表启动成功。
./elasticsearch -d # -d代表后台启动
  1. 安装kibana作为控制台,安装比较简单,一样的下载安装包,解压,配置中修改连接的地址为es服务器的ip和端口号。同样操作用es的账户
server.port: 5601         #kibana端口
server.host: "0.0.0.0"   #所有主机都能访问,或者也可以指定一个ip
elasticsearch.hosts: "http://es服务公网IP:9200"     #配置es

3 ElasticSearch的基础使用

  1. 创建Index
put /indexName
{
   
{
   
    "settings" : {
   
        "number_of_shards" : 3, //分片数,详情可查询lucene文档
        "number_of_replicas" : 1  // 文档备份数
    }
}
}
  1. 删除索引
DELETE /indexName
  1. 查看索引下文档
GET /indexName/_doc/_search
  1. 修改索引映射关系
PUT /indexName/_mapping
{
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值