【Elasticsearch】Elasticsearch命令行操作

2023-11-10

Elasticsearch

一、ES介绍

Redis可以使用内存加载数据并实现数据快速访问,MongoDB可以在内存中存储类似对象的数据并实现数据的快速访问,在企业级开发中对于速度的追求是永无止境的。ES也是一款NoSQL解决方案,只不过他的作用不是为了直接加速数据的读写,而是加速数据的查询的。

ES(Elasticsearch)是一个分布式全文搜索引擎,重点是全文搜索。

那什么是全文搜索呢?比如用户要买一本书,以Java为关键字进行搜索,不管是书名中还是书的介绍中,甚至是书的作者名字,只要包含java就作为查询结果返回给用户查看,上述过程就使用了全文搜索技术。搜索的条件不再是仅用于对某一个字段进行比对,而是在一条数据中使用搜索条件去比对更多的字段,只要能匹配上就列入查询结果,这就是全文搜索的目的。而ES技术就是一种可以实现上述效果的技术。

要实现全文搜索的效果,不可能使用数据库中like操作去进行比对,这种效率太低了。ES设计了一种全新的思想,来实现全文搜索。具体操作过程如下:

  1. 将被查询的字段的数据全部文本信息进行查分,分成若干个词

    • 例如“中华人民共和国”就会被拆分成三个词,分别是“中华”、“人民”、“共和国”,此过程有专业术语叫做分词。分词的策略不同,分出的效果不一样,不同的分词策略称为分词器。
  2. 将分词得到的结果存储起来,对应每条数据的id

    • 例如id为1的数据中名称这一项的值是“中华人民共和国”,那么分词结束后,就会出现“中华”对应id为1,“人民”对应id为1,“共和国”对应id为1

    • 例如id为2的数据中名称这一项的值是“人民代表大会“,那么分词结束后,就会出现“人民”对应id为2,“代表”对应id为2,“大会”对应id为2

    • 此时就会出现如下对应结果,按照上述形式可以对所有文档进行分词。需要注意分词的过程不是仅对一个字段进行,而是对每一个参与查询的字段都执行,最终结果汇总到一个表格中

分词结果关键字 对应id
中华 1
人民 1,2
共和国 1
代表 2
大会 2
  1. 当进行查询时,如果输入“人民”作为查询条件,可以通过上述表格数据进行比对,得到id值1,2,然后根据id值就可以得到查询的结果数据了。

上述过程中分词结果关键字内容每一个都不相同,作用有点类似于数据库中的索引,是用来加速数据查询的。但是数据库中的索引是对某一个字段进行添加索引,而这里的分词结果关键字不是一个完整的字段值,只是一个字段中的其中的一部分内容。并且索引使用时是根据索引内容查找整条数据,全文搜索中的分词结果关键字查询后得到的并不是整条的数据,而是数据的id,要想获得具体数据还要再次查询,因此这里为这种分词结果关键字起了一个全新的名称,叫做倒排索引

使用ES其实准备工作还是挺多的,必须先建立文档的倒排索引,然后才能继续使用。

二、安装Elasticsearch

windows版安装包下载地址:https://www.elastic.co/cn/downloads/elasticsearch

将压缩包下载后,解压
在这里插入图片描述

  • bin目录:包含所有的可执行命令
  • config目录:包含ES服务器使用的配置文件
  • jdk目录:此目录中包含了一个完整的jdk工具包,版本17,当ES升级时,使用最新版本的jdk确保不会出现版本支持性不足的问题
  • lib目录:包含ES运行的依赖jar文件
  • logs目录:包含ES运行后产生的所有日志文件
  • modules目录:包含ES软件中所有的功能模块,也是一个一个的jar包。和jar目录不同,jar目录是ES运行期间依赖的jar包,modules是ES软件自己的功能jar包
  • plugins目录:包含ES软件安装的插件,默认为空

启动ES(双击即可)
在这里插入图片描述
浏览器访问
在这里插入图片描述

9200:表示公开对外的端口号

9300:表示集群成员之间的端口号

三、安装Kibana

1、kibana是es数据的前端展现,数据分析时,可以方便地看到数据。作为开发人员,可以方便访问es。

https://www.elastic.co/cn/downloads/

历史版本下载:https://www.elastic.co/cn/downloads/past-releases/

2、下载,解压kibana。

3、启动Kibana:bin\kibana.bat

在这里插入图片描述

浏览器访问 http://localhost:5601
在这里插入图片描述

默认端口为:5601

可能会出现的问题:
运行Kibana.bat,启动失败,报错大概意思是已经存在一个启动的Kibana了,但明明是第一次启动
报错:

[warning][savedobjects-service] Unable to connect to Elasticsearch. 
Error: [resource_already_exists_exception] index [.kibana_task_manager_1/_2s2vHazSRqCl7dPlZ_oQQ] already exists, with { index_uuid="_2s2vHazSRqCl7dPlZ_oQQ" & index=".kibana_task_manager_1" }

在cmd中运行如下命令:

curl -X DELETE http://localhost:9200/.kibana*

四、介绍ES中的一些概念

集群

集群这一概念已经遍及天下了,在Elasticsearch中也不例外,可以将多台Elasticsearch节点组成集群使用,可以在任意一台节点上进行搜索。

节点

节点是一台Elasticsearch服务器,可以存储、查询、创建索引,也可以与其它节点一共组成一个集群。

索引—数据库

索引是具有某种相似特性的文档集合,熟悉mysql的应该不会对于这个名词陌生,Elasticsearch使用的是倒排索引。

文档—数据库中表中一条记录

一个文档是一个可以被索引的基础信息单元。

分片

单个索引包含数据太大的话,将会降低索引速度。为此,Elasticsearch提供了将索引细分成多个片段的能力,就是分片。

副本

副本是ElasticSearch索引分片的备份,主要应对与节点故障时保存数据的可用性。副本与它的原始分片不会在同一个节点上,以此来保存单节点故障时的高可用。
在这里插入图片描述

注意: ES6.0以后Type这个概念模糊了,7.0以后不在使用Type. 默认索引的type都是_doc。

五、操作ES

ES中提供了大量的接口—这些接口要想访问必须按照restful风格来访问。

POST 添加操作 DELETE 删除操作 PUT 修改操作 GET 查询操作

可以在地址栏以地址的形式传递参数 /user/1

5.1索引

5.1.1 创建索引

PUT /索引名称
{
	"mappings":{
	     "properties":{
	           "字段名": {"type":"数据类型"}
               "字段名":{"type":"数据类型"}}}
}

类型: text字符串类型 数字类型:int double

在这里插入图片描述

创建索引并指定分词器

前面创建的索引是未指定分词器的,可以在创建索引时添加请求参数,设置分词器。目前国内较为流行的分词器是IK分词器,使用前先在下对应的分词器,然后使用。

IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

分词器下载后解压到ES安装目录的plugins目录中即可,安装分词器后需要重新启动ES服务器。使用IK分词器创建索引格式:

PUT请求		http://localhost:9200/books

#请求参数如下(注意是json格式的参数)
{
    "mappings":{							#定义mappings属性,替换创建索引时对应的mappings属性		
        "properties":{						#定义索引中包含的属性设置
            "id":{							#设置索引中包含id属性
                "type":"keyword"			#当前属性可以被直接搜索
            },
            "name":{						#设置索引中包含name属性
                "type":"text",              #当前属性是文本信息,参与分词  
                "analyzer":"ik_max_word",   #使用IK分词器进行分词             
                "copy_to":"all"				#分词结果拷贝到all属性中
            },
            "type":{
                "type":"keyword"
            },
            "description":{
                "type":"text",	                
                "analyzer":"ik_max_word",                
                "copy_to":"all"
            },
            "all":{							#定义属性,用来描述多个字段的分词结果集合,当前属性可以参与查询
                "type":"text",	                
                "analyzer":"ik_max_word"
            }
        }
    }
}

创建完毕后返回结果和不使用分词器创建索引的结果是一样的,此时可以通过查看索引信息观察到添加的请求参数mappings已经进入到了索引属性中
在这里插入图片描述

5.1.2 查询所有索引

GET /_cat/indices

在这里插入图片描述

5.1.3 删除索引

DELETE /索引名称

在这里插入图片描述

5.1.4 查询索引结构

GET /索引名称

在这里插入图片描述

####################索引######################
# 创建索引
PUT /student
{
  "mappings": {
    "properties": {
      "name":{"type": "text"},
      "age":{"type": "integer"}
    }
  }
}

PUT /teacher
{
  "mappings": {
    "properties": {
      "name":{"type": "text"},
      "age":{"type": "integer"},
      "address":{"type": "text"}
    }
  }
}

# 查询所有索引
GET /_cat/indices

# 查询索引结构
GET /student

# 删除索引
DELETE /teacher

5.2 文档

5.2.1 添加文档

指定id添加 在这里插入图片描述
不指定id添加。—ES会生成一个唯一随机的字符串
在这里插入图片描述

5.2.2 删除文档

DELETE  /索引名称/_doc/id值

在这里插入图片描述

5.2.3 查询文档

在这里插入图片描述

5.2.1 修改文档

第一种: 需要指定所有被修改的字段名,如果没有指明的字段则会消失

# 修改文档(修改为下面的,没有列出的属性,会被删除)
PUT /teacher/_doc/1
{
  "name":"尚腾飞",
  "age":16
}

没有指明的字段则会消失在这里插入图片描述

第二种: 修改部分字段。没有指明的字段不会消失
在这里插入图片描述

####################文档######################
# 指定id,添加文档
POST /teacher/_doc/1
{
  "name":"刘德华",
  "age":18,
  "address":"香港"
}

# 不指定id添加。---ES会生成一个唯一随机的字符串
POST /teacher/_doc
{
  "name":"张学友",
  "age":18,
  "address":"香港"
}


# 删除文档
DELETE /teacher/_doc/0W2lW4QBTTQOPynSggAc

# 查询文档
GET /teacher/_doc/1

# 修改文档(修改为下面的,没有列出的属性,会被删除)
PUT /teacher/_doc/1
{
  "name":"尚腾飞",
  "age":16
}
# 修改文档(只修改给出的,没有列出的属性不会被删除)
POST /teacher/_doc/1/_update
{
  "doc":{
      "name":"尚"
  }
}
# 修改文档(官方推荐的写法,效果同上)
POST /teacher/_update/1
{
  "doc":{
      "name":"尚1"
  }
}

5.3 根据其他条件查询文档内容

5.3.1 查询索引中的所有文档内容

MySql : select * from 表名


ES: GET /索引名称/_search

在这里插入图片描述

查询所有文档信息,我们想要的结果封装到了hits中

5.4 根据其他条件查询

mysql: select name from 表名 where 其他字段=值


ES: GET /索引名称/_search?q=列名:值

在这里插入图片描述

5.5把查询的条件封装到json对象中—重点

在这里插入图片描述

注意: 排序按照数字,日期来排序。
mysql: 分页使用limit完成。 select * from 表名 limit (起始记录),每页的条数。

ES: “from”: 起始记录, “size”: 每页的条数

5.6 多条件查询

must等价于and
在这里插入图片描述

should 等价于 or
在这里插入图片描述

must_not 等价于 !
在这里插入图片描述
5.7 高亮查询
在这里插入图片描述

指定前缀后缀
在这里插入图片描述

上面我们把所有对应ES操作的API接口文档测试了一遍。下面使用springboot整合ES
【springboot整合ES】springboot整合ES
springboot整合es

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Elasticsearch】Elasticsearch命令行操作 的相关文章

随机推荐

  • kafka不同的topic使用相同的group的问题

    前几天为了省事 在申请group的时候 就使用了原来的group 本来以为group从属于某一个topic topic不同 group之间相互不会影响 但实际情况不是这样的 kafka不同topic的consumer如果用的groupid名
  • android 下拉刷新 组件,Android实现简单的下拉刷新控件

    背景 列表控件在Android App开发中用到的场景很多 在以前我们用ListView GradView 现在应该大多数开发者都已经在选择使用RecyclerView了 谷歌给我们提供了这些方便的列表控件 我们可以很容易的使用它们 但是在
  • maven跳过单元测试-maven.test.skip和skipTests的区别以及部分常用命令

    DskipTests 不执行测试用例 但编译测试用例类生成相应的class文件至target test classes下 Dmaven test skip true 不执行测试用例 也不编译测试用例类 不执行测试用例 但编译测试用例类生成相
  • poll, select, epoll

    随着2 6内核对epoll的完全支持 网络上很多的文章和示例代码都提供了这样一个信息 使用epoll代替传统的poll能给网络服务应用带来性能上的提升 但大多文章里关于性能提升的原因解释的较少 这里我将试分析一下内核 2 6 21 1 代码
  • HDU - 1312 Red and Black(DFS)

    There is a rectangular room covered with square tiles Each tile is colored either red or black A man is standing on a bl
  • 微信小程序导出当前画布指定区域的内容并生成图片保存到本地相册(canvas)

    最近在学小程序 在把当前画布指定区域的内容导出并生成图片保存到本地这个知识点上踩坑了 这里用到的方法是 wx canvasToTempFilePath 该方法作用是把当前画布指定区域的内容导出生成指定大小的图片 并返回文件路径 详情 看文档
  • Idea快捷键大全(Windows)

    转载 Idea快捷键大全 Windows Lymanyu的博客 CSDN博客 idea快捷键
  • spring+shiro多节点session共享

    shiro我就不多介绍了 我的方案是重写 shiro的sessionDAO 把session存储到redis上 直接上代码 一 spring中配置
  • Node.js 利用Promise对象并发写入流、读取流(Stream)

    上篇文章我们用高阶函数 函数柯里化 实现并发文件读取流 写入流 今天 我们用另外一种方法实现 let fs require fa 写一个通用的读取函数 返回promise对象 function getFile filename return
  • php 下载七牛文件上传,laravel下封装的七牛云图片上传下载方法

    fileName 文件名 filePath 文件路径 我用的是七牛云私有空间 如果用公有空间也一样 只是不需要下载方法而已
  • 042_前端规范 2021-06-03

    042 前端规范 最终目的 去除冗余 让代码易于维护 常见代码片段 遍历数组 1 2 3 forEach function value index console log value 映射新数组 arr 1 2 3 map v gt v 2
  • 如何在word中的图片上画圈标注_怎么在word画圈标注 如何在word图片中进行画圈标示...

    例如上面在图片上画圈效果的制作方法 1 单击插入 形状 线条 椭圆工具 2 拖动鼠标 在图片所需要的位置绘制一个适当大小的圆 3 单击绘图工具格式 形状填充 无填充颜色 4 单击绘图工具格式 形状轮廓 红色即可 如图所示 怎么用Word画简
  • JAVA基础之接口

    什么是接口 接口是一种特殊的类 但与类有本质区别 类中有成员方法和成员变量但是接口中只有常量和用abstract定义的方法 接口的声明采用关键字interface 格式 修饰符 interface 接口名 方法体 接口可以多继承 使用关键字
  • easypoi Excel导入导出 (工具类)

    1 用到的jar 红色的必须的 下面那些是运行起来 缺哪个就导哪个 如果报错提示没有这个方法的话 重启Tomcat 还不好使就是jar包版本不对 找个高点的版本 easypoi annotation 3 1 0 jar easypoi ba
  • SQL server数据库与My sql数据库的区别?

    在我们生活中无时无刻不需要使用到数据库 网络爬虫等一系列用处 那数据库到底是什么呢 我们一起接着往下看 数据库是存放数据的仓库 存储空间很大 可千万条 上亿条数据 但是数据库并不是随意地将数据进行存放 是有一定规则的 否则查询的效率会很低
  • Python最短代码实现人脸识别,打造自己专用人脸识别!

    对于类似于人脸的对象 你或许需要不少于 6000个分类器 每一个都需要成功匹配 当然 有容错率 才能检测出人脸 但这有一个问题 对于人脸识别 算法从左上角开始计算一个个数据块 不停问 这是张脸吗 每个数据块有超过 6000个检测 加起来的计
  • GM(1,1)预测模型的残差检验、关联度检验、后验差检验代码

    在建立好灰色模型后 首先要进行模型的检验 以检验模型的效果 一般有三种检验方法 相对残差检验 关联度检验 后验差检验 当三种检验全部通过时 表明模型的效果较好 才可以使用模型进行后续的预测 否则 将要对模型进行残差修正 直到三种检验均通过为
  • 引入PageHelper未进行分页操作SQL自动携带Limit 分页参数

    使用环境 PageHelper 版本 5 2 0 数据库类型和版本 mysql5 7 JDBC URL jdbc mysql x x x characterEncoding UTF 8 useAffectedRows true allowM
  • springboot序列化问题

    springboot的Long 前后端交互失去精度 BigDecimal序列化 精度问题 为空字段不序列化问题 方案1 为空字段序列化 always application yml配置 为空字段不序列化 non null spring ja
  • 【Elasticsearch】Elasticsearch命令行操作

    文章目录 Elasticsearch 一 ES介绍 二 安装Elasticsearch 三 安装Kibana 四 介绍ES中的一些概念 集群 节点 索引 数据库 文档 数据库中表中一条记录 分片 副本 五 操作ES 5 1索引 5 1 1