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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch学习笔记(二)-增删改查操作的详细讲解

1.增加数据操作


增加一个index及type及document:


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"}
]
}


20201229092743697.png


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


20201229092814560.png


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


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


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


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


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


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关键字就能够实现.


DELETE movie_index/movie/2


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


20201229104341488.gif


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


20201229135830606.png


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


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


POST movie_index/movie/_delete_by_query
{
  "query":{
    "match":{
      "name":"red"
    }
  }
}


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


20201229141336863.gif


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


3.修改数据操作


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


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


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


20201229144331304.gif


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


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


PUT /movie_index/movie_test/1
{ "id":1,
  "name":"红海行动",
  "doubanScore":8.5,
  "actorList":[  
  {"id":1,"name":"张译"},
  {"id":2,"name":"海清"},
  {"id":3,"name":"张涵予"}
 ]
}


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


image.gif


4.查询数据操作


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


GET movie_index/_search


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


查询结果:


20201229092829672.png


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


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


GET movie_index/movie/_search
{
  "query": {}
  ,"from": 0
  ,"size": 20
  ,"highlight": {}
  ,"aggs": {
    "NAME": {
      "AGG_TYPE": {}
    }
  }
}

20201229092844666.png


4.1-关键字查询


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


GET movie_index/movie/_search
{
  "query": {
"match": {
  "name": "red"
}
  }
}

20201229092933443.gif


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


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


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


20201229094850466.png


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


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


4.2-分页查询


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


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


GET movie_index/movie/_search
{
  "query": {
     "match_all":{}
  }
  , "from": 0
  , "size": 2
}

20201229095259582.gif


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


4.3-查询内容高亮显示


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


代码如下:


GET movie_index/movie/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  }
  ,"highlight": {
    "fields": {
      "name": {}
    }
  }
}


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


这里我们运行一下看看:


20201229101346159.gif


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


4.4-聚合函数


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


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


桶,类似于数据库中的group by,就好比将我们的数据按照地区分为上海桶,江苏桶等或者是按照性别分为男桶与女桶.主要的作用就是划分

指标,类似于数据库中的各种数据分析的函数,像count,max,min,avg等函数.主要的作用就是进行数据的分析.


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
4月前
|
API 网络架构 索引
Elasticsearch索引中数据的增删改查与并发控制
Elasticsearch索引中数据的增删改查与并发控制
|
5月前
|
安全 大数据 API
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
262 0
|
12天前
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
47 3
|
5月前
|
SQL JSON API
ELK技术栈 - Elasticsearch 学习笔记(三)
ELK技术栈 - Elasticsearch 学习笔记(三)
86 0
|
3月前
|
Linux Docker 索引
ElasticSearch 通过 Kibana 与 ElasticSearch-head 完成增删改查
ElasticSearch 通过 Kibana 与 ElasticSearch-head 完成增删改查
49 0
|
4月前
|
JSON DataWorks 关系型数据库
DataWorks操作报错合集之同步Elasticsearch数据报错:Cat response did not contain a JSON Array,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
监控 搜索推荐 Go
万字详解!在 Go 语言中操作 ElasticSearch
本文档通过示例代码详细介绍了如何在Go应用中使用`olivere/elastic`库,涵盖了从连接到Elasticsearch、管理索引到执行复杂查询的整个流程。
75 0
|
5月前
|
Kubernetes 关系型数据库 MySQL
实时计算 Flink版产品使用合集之在Kubernetes(k8s)中同步MySQL变更到Elasticsearch该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
安全 Java API
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
86 1
|
5月前
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
215 1