前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ElasticSearch学习笔记(二)-增删改查操作的详细讲解

ElasticSearch学习笔记(二)-增删改查操作的详细讲解

作者头像
萌萌哒的瓤瓤
发布于 2021-01-13 09:55:55
发布于 2021-01-13 09:55:55
51700
代码可运行
举报
运行总次数:0
代码可运行

1.增加数据操作

增加一个index及type及document:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /movie_index/movie/1
{ "id":1,
  "name":"operation red sea",
  "doubanScore":8.5,
  "actorList":[  
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}

运行之后我们会看到这些结果信息:

在ElasticSearch中存储数据都是将数据分散存储的即我们所说的 分片,这里大家可能会问分片有什么作用呢.这里我们通过一个简单的例子来了解一下分片的作用.

说先第一点就是 安全,我们将数据分散存储的话,这样的如果某个分片内的数据失效了,那么显然我们起码能保证其他分片的数据仍然是可用的.这样能够在一定程度上保证数据的安全性

另外一点就是 效率,举个例子吧,如果现在我们有1吨=1000斤的水果,这里面有苹果,梨,香蕉等等,我们现在就要把它分类,苹果的放一堆,香蕉的放一堆,如果我现在让你直接将这1000斤水果分出来,那么显然是很难的,但是如果我们先把他分成100份,每份10公斤的话,那么这样分起来就相对简单很多了,这样我们的效率就提高了很多了.

正是因为上面两个原因,ElasticSearch才选择采用分片的方式来存储数据.

之后我们再增加两条信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /movie_index/movie/2
{
  "id":2,
  "name":"operation meigong river",
  "doubanScore":8.0,
  "actorList":[  
{"id":3,"name":"zhang han yu"}
]
}

PUT /movie_index/movie/3
{
  "id":3,
  "name":"incident red sea",
  "doubanScore":5.0,
  "actorList":[  
{"id":4,"name":"zhang chen"}
]
}

2.删除数据操作

删除这个操作也很简单,只需要通过del关键字就能够实现.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE movie_index/movie/2

这里我们选择的是直接删除id为2的这条记录

测试完成之后我们的确可以看到id为2的数据已经被删除了,能够删除数据.这里还有一个注意点就是ElasticSearch5.0的版本以后就 不再支持删除单个type了 ,如果去执行该命令的话,我们会看到会报下面的错误

就是告诉我们是不能直接删除type的,但是我们可以通过 POST命令来删除type下面所有的数据或者是直接删除index之后再重新创建type即可.

这里我们就简单再来看看post命令是如何进行删除操作的.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST movie_index/movie/_delete_by_query
{
  "query":{
    "match":{
      "name":"red"
    }
  }
}

这里的"query"就代表我们的删除条件,整段代码的意思就是删除movie_index索引节点下movie这个type里面name里面有red关键字的所有记录.这里我们执行来看看.

可以看到执行完毕之后,我们type下的两条含有red关键字的数据都已经删除了.这样我们关于删除操作就已经介绍完毕了.

3.修改数据操作

讲完删除操作,我们再来看看elasticSearch的修改操作,大家都知道elasticSearch是基于文本的,所以 文本的修改本质上就是覆盖 ,所以这里我们还是通过put操作来进行.

在执行修改操作之前我们先将之前我们删除的数据重新添加到我们的索引节点的type下面.

添加完毕之后我们再来看看我们的修改操作,但是呢,在执行修改操作之前呢,我们先来看看我们之前说过的关于elasticSearch6与之前的版本有一个不同的地方就是 elasticSearch6只支持一个索引节点下面有且只能有一个type ,这里我们来测试一下.

测试之后我们能够发现的确能够发现的确只这样,只能一个索引节点下面有且只能有一个type.

再验证完这个之后我们再来看看我们具体的修改操作是什么样的.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /movie_index/movie_test/1
{ "id":1,
  "name":"红海行动",
  "doubanScore":8.5,
  "actorList":[  
  {"id":1,"name":"张译"},
  {"id":2,"name":"海清"},
  {"id":3,"name":"张涵予"}
 ]
}

其实本质上的操作和我们之前的添加操作的代码 是一样的,只需要稍微注意一下id就行了.这样我们再来看看我们执行之后的结果如何吧.

4.查询数据操作

在看完修改操作之后就只剩下我们的最后一个查询操作了.接下来我们来查询一下这些数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET movie_index/_search

这条语句的操作意思就是查找movie_index节点下的所有信息

查询结果:

因为我们没有添加任何的 筛选条件,所以我们每条数据的相关性算分都是1,在之后我们的查询过程中我们添加完条件之后我们再来回顾就能发现相关性算分的变化了.

之后我们来看看elasticSearch关于查询的各个命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET movie_index/movie/_search
{
  "query": {}
  ,"from": 0
  ,"size": 20
  ,"highlight": {}
  ,"aggs": {
    "NAME": {
      "AGG_TYPE": {}
    }
  }
}

4.1-关键字查询

我们先来测试一下关键字查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET movie_index/movie/_search
{
  "query": {
"match": {
  "name": "red"
}
  }
}

这里我们可以看到Field就类似我们数据库中的字段,后面的就是我们需要匹配的内容,并且我们能够看到查询出来的两条数据的相关性算分其实是差不多的.这里 我们猜测可能是通过关键字在该字段出现的频率来计算相关性算分.

这里我们需要注意一点那就是关键字查询中的关键字是不能为空的,通过下面这张图大家就知道什么意思.

大家通过这张图就能理解了,关键字查询是不支持关键字为空的查询的,如果关键字为空的话,那么查询出来是会直接报错的.所以我们必须要添加相应的关键字,如果没有是没有关键字的查询的话,就需要按照下面的样子写,这样就不会报错了.

添加的那段代码的意思就是全匹配,大家应该都能看的懂.

关键字查询测试结束之后,我们再来测试一下分页查询.

4.2-分页查询

这里的分页查询和mysql中的分页查询操作本质上是没有区别的.

也是只要规定我们的起始点以及页的大小即可.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET movie_index/movie/_search
{
  "query": {
     "match_all":{}
  }
  , "from": 0
  , "size": 2
}

可以看到总数据量是三条,但是这里我们查询出来只显示了前面的两条数据,显然分页查询已经执行成功

4.3-查询内容高亮显示

测试完分页查询操作之后,我们再来测试一下高亮显示,其实这里的高亮显示是和上面的关键字查询是想匹配的,就和我们正常的高亮显示是一样的,大家想想我们一般会让什么东西高亮显示呢,很明显就是我们需查找的东西.所以高亮显示一般就是与关键字查询相匹配的.

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET movie_index/movie/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  }
  ,"highlight": {
    "fields": {
      "name": {}
    }
  }
}

highlight里面值需要填写我们对于关键字查询中字段的名称就行了,可以填写额外的字段,但是我们并不知道该字段中需要高亮显示的内容,所以是不会生效的,但是也不不会报错的.

这里我们运行一下看看:

可以看到 高亮显示并不是直接将匹配的内容颜色发生改变,而是像HTML语言一样,添加了一个标记而已.

4.4-聚合函数

测试完高亮显示之后我们最后再来看看聚合函数.

在看聚合函数之前,我们需要了解两个概念.一个就是就是 ,另一个就是 指标 ,这样说大家可能不懂,和我们平常的关系型数据库对应起来,大家就知道他们俩的意思了.

  • 桶,类似于数据库中的group by,就好比将我们的数据按照地区分为上海桶,江苏桶等或者是按照性别分为男桶与女桶.主要的作用就是划分
  • 指标,类似于数据库中的各种数据分析的函数,像count,max,min,avg等函数.主要的作用就是进行数据的分析.

到这里我们关于ElasticSearch增删改查的基本操作就已经分析结束了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ElasticSearch基本操作指令-增删改查
Result:查询不到数据,由于 desc 是 keyword ,不会被分词器解析,需精确匹配查询
子润先生
2021/06/23
3110
Elasticsearch增删改查 之 —— Get查询
GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在;或者执行CURD中的文档查询。与检索不同的是,GET查询是实时查询,可以实时查询到索引结果。而检索则是需要经过处理,一般默认是1秒钟吧...才能搜索到。合理利用这些方法,可以更灵活的使用Elasticsearch。 更多内容参考ELK教程 阅读这篇文档,发现自己对很多地方不是很理解。比如存储机制、版本维护等等。暂时先做为阶段性的学习吧...后续更新在回来补补.... 查询样例 Get API允许基于ID字段从Elast
用户1154259
2018/01/17
1K0
Elasticsearch基本操作-搜索(二)
在Elasticsearch中,可以使用分页功能来分批返回搜索结果。分页可以通过"from"和"size"参数来控制。以下是在名为my_index的索引中搜索所有包含"apple"的文档,并返回第2页每页10个结果的示例:
堕落飞鸟
2023/05/08
1200
从 0 到 1 学习 elasticsearch ,这一篇就够了!(建议收藏)
之前一直想花点时间写一篇 elasticsearch 的保姆级教程,于是,趁着年假的几天时间加上周末的一些时间,我产出了自认为算是非常详细的,基于目前最新版本的elasticsearch7.11教程。不管是新手上路,还是秋名山老司机,都建议收藏一下,希望看完对您有所帮助!如果可以,记得一键三连!
大数据梦想家
2021/04/14
1.8K0
从 0 到 1 学习 elasticsearch ,这一篇就够了!(建议收藏)
Python3操作Elasticsearch进行增删改查
# -*- coding: utf-8 -*- from elasticsearch import Elasticsearch # 默认host为localhost,port为9200.但也可以指定host与port es = Elasticsearch() # 插入数据,index,doc_type名称可以自定义,id可以根据需求赋值,body为内容 es.index(index="my_index",doc_type="test_type",id=0,body={"name":"python","addr":"深圳"}) es.index(index="my_index",doc_type="test_type",id=1,body={"name":"python","addr":"深圳"}) #同样是插入数据,create() 方法需要我们指定 id 字段来唯一标识该条数据,而 index() 方法则不需要,如果不指定 id,会自动生成一个 id es.create(index="my_index",doc_type="test_type",id=1,body={"name":"python","addr":"深圳"}) #删除指定的index、type、id的文档 es.delete(index='indexName', doc_type='typeName', id=1) #删除index es.indices.delete(index='news', ignore=[400, 404]) query = {'query': {'match_all': {}}}# 查找所有文档 query1 = {'query': {'match': {'sex': 'famale'}}}# 删除性别为女性的所有文档 query2 = {'query': {'range': {'age': {'lt': 11}}}}# 删除年龄小于11的所有文档 query3 = {'query': {'term': {'name': 'jack'}}}# 查找名字叫做jack的所有文档 #删除所有文档 es.delete_by_query(index="my_index",doc_type="test_type",body=query) #get:获取指定index、type、id所对应的文档 es.get(index="my_index",doc_type="test_type",id=1) #search:查询满足条件的所有文档,没有id属性,且index,type和body均可为None result = es.search(index="my_index",doc_type="test_type",body=query) print(result['hits']['hits'][0])# 返回第一个文档的内容 #update:更新指定index、type、id所对应的文档 #更新的主要点: #1. 需要指定 id #2. body={"doc": <xxxx>} , 这个doc是必须的 es.update(index="my_index",doc_type="test_type",id=1,body={"doc":{"name":"python1","addr":"深圳1"}})
双面人
2019/04/10
2.2K0
学习ElasticSearch的Restful Api快速掌握ES数据的增删改查
3)NODE-1使用文档ID来确定文档属于分片0,通过集群状态中的内容路由表信息获知分片0的主分片位于NODE3,因此请求被转发到NODE3上
用户3587585
2024/06/13
4060
学习ElasticSearch的Restful Api快速掌握ES数据的增删改查
ElasticSearch教程(二)—— 基本使用
ElasticSearch是面向文档的,它存储文档,并索引每个文档的内容使之可以被索引。ES选择json作为文档序列化格式。
逝兮诚
2019/10/30
6810
Elasticsearch学习(五)Elasticsearch中的mapping问题,Search 搜索详解
Mapping在Elasticsearch中是非常重要的一个概念。决定了一个index中的field使用什么数据格式存储,使用什么分词器解析,是否有子字段等。
一写代码就开心
2021/03/02
1.8K0
Elasticsearch学习(五)Elasticsearch中的mapping问题,Search 搜索详解
ElasticSearch 实用学习笔记 (从入门到精通)
找到 config 下的 kibana.yml 文件,修改最后一行为 i18n.locale: “zh-CN”
Gorit
2021/12/08
2.4K0
ElasticSearch常见用法, 看这一篇就够了
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。
架构狂人
2023/09/13
3390
ElasticSearch常见用法, 看这一篇就够了
elasticSearch学习(九)
此次项目实战采用java爬虫爬取京东的数据放在es数据源中,然后通过页面来模拟京东搜索。
崔笑颜
2020/08/24
1.1K0
elasticSearch学习(九)
02.全文搜索ES
elasticsearch 6 (和elasticsearch 5 的区别在于,root用户权限、一个库只能建立一个表)
全栈程序员站长
2022/06/30
7200
02.全文搜索ES
ElasticSearch 高级操作
在 Postman 中,向 ES 服务器发 DELETE 请求:http://127.0.0.1:9200/student
用户9615083
2022/12/25
7630
ElasticSearch  高级操作
全文检索工具elasticsearch:第一章:理论知识
什么是搜索, 计算机根据用户输入的关键词进行匹配,从已有的数据库中摘录出相关的记录反馈给用户。 
Java廖志伟
2022/09/28
5150
全文检索工具elasticsearch:第一章:理论知识
快速入门ElasticSearch
最近事情比较多,好久没更新文章,现在失踪人口回归,开始日常更新文章,一周不低于两篇,同时内容不限于Python,会有好多有趣的技术等着去学习和发现~~~
啃饼思录
2020/10/23
1.9K0
快速入门ElasticSearch
ElasticSearch高级操作
term查询,查询text类型字段时,只有其中的单词相匹配都会查到,text字段会对数据进行分词
小炜同学
2022/09/23
7900
Elasticsearch基本使用
可以在https://www.elastic.co/cn/downloads/elasticsearch这个页面找到elasticsearch对应系统的安装包,elasticsearch用java开发的, 最新的版本内置了对应的jdk, 通过下面的方式能快速启动:
良辰美景TT
2020/12/14
6630
ElasticSearch学习(二)——索引、文档简单操作
在Postman中发PUT请求:http://127.0.0.1:9200/index_name
传说之下的花儿
2023/04/16
5480
ElasticSearch学习(二)——索引、文档简单操作
elasticsearch[三]-搜索结果处理排序、分页、高亮等原理+实践
elasticsearch 默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword 类型、数值类型、地理坐标类型、日期类型等。
汀丶人工智能
2024/01/17
1.3K0
elasticsearch[三]-搜索结果处理排序、分页、高亮等原理+实践
【elasticsearch】基本概念和增删改查
Elasticsearch 是一个近实时的搜索平台。这意味着从您索引一个文档开始直到它可以被查询时会有轻微的延迟时间(通常为一秒)。 Lucence;
周杰伦本人
2022/10/25
2980
【elasticsearch】基本概念和增删改查
相关推荐
ElasticSearch基本操作指令-增删改查
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验