科普文:微服务之全文检索ElasticSearch忝删改查详细操作说明

一、Restful简介

RESTFul:Representational State Transfer,中文意思:表现层状态转化。变现层指的是资源的表现层,这里的资源是指网络上的信息,比如一张图片,一段文本,一步电影,那么每个资源在网络上都有一个标识,可以理解为一个ID,每个资源都有一个ID去表示它,这个ID就称之为URL。当我们给了这个资源一个地址后,比如我们经常说的URL,我们就能访问这个资源。

表现层状态转化:

我们平时访问一个网站,其实就是客户端和服务端的一种互动过程,有了互动,这个数据的状态肯定会发生改变。Elasticsearch默认走的是http协议,而http协议它是一种无状态的协议,无状态就是指服务端它不会记录客户端的所有信息和操作,客户端必须每次带上自己的状态去请求服务器。因此,如果客户端想要操作这个服务器,必须通过某些手段,才能让服务器发生状态转化。而这种转化是建立在表现层之上的,所以说这就表现层的状态转化。

转化手段:

  1. GET:用来获取资源
  2. POST:用来创建资源(也可以用来更新资源)
  3. PUT:用来更新资源
  4. DELETE:用来删除资源

我们对ES的所有操作,都被封装成了RestAPI,所以我们只要发送请求就行了。

二、查看ES的基本信息

查看所有结点:

GET _cat/nodes

查看ES健康状况

GET _cat/health
  • Green:主分片与副本都正常分配
  • Yellow:主分片全部正常分配,有副本分片未能正常分配
  • Red:有主分片未能分配

查看主节点:

GET _cat/master

查看所有索引(类似于show databases)

GET _cat/indices

三、索引操作

3.1 创建索引

创建并显示指定索引字段的类型

创建名为user的索引与对应映射信息。

PUT /user
{"mappings": {"properties": {"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"address": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"remark": {"type": "text","fields": {"keyword": {"type": "keyword"}}},"age": {"type": "long"},"salary": {"type": "double"},"birthDate": {"type": "date","format": "yyyy-MM-dd"}}}
}

3.2 创建文档映射

通过创建文档的方式自动映射字段的类型,当索引不存在的时候会自动创建并且字段类型自动根据值进行映射。

格式:PUT /索引名/类型名/文档id

以前的写法是:{index}/{type}/{id},例如:user/_doc/1

现在的写法是:{index}/_doc/{id},例如:user/_doc/1

由于在ES7中将type概念移除了,所以现在建议直接写成_doc,当然你硬要指定type类型也行,只是ES是给出一个警告:#! [types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id}).

PUT /user/_doc/1
{"name":"小白学es","age":3
}

如果索引原本中没有的字段,这是也会自动加上并且映射类型,比如之前是没有sex字段的:

PUT /user/_doc/1
{"name":"小白学es","age":18,"sex":"男"
}

3.3 查看索引

GET /user

3.4 删除索引

DELETE /user

四、文档操作

4.1 增加文档信息

在索引 user 中增加一条文档信息。如果不指定ID,那么ES会自动生成ID

POST /user/_doc
{"name": "张三","age": 29,"salary": 100,"address": "北京市","remark": "来自中国北京市的张先生","birthDate": "1990-01-10"
}

增加文档时指定ID:

POST /user/_doc/1
{"name": "张三","age": 29,"salary": 100,"address": "北京市","remark": "来自中国北京市的张先生","birthDate": "1990-01-10"
}

4.2 更新文档信息

更新文档信息可以使用PUT和POST来请求,TODO 待确认? PUT修改:全量字段更新,而POST 修改:指定字段更新(推荐使用)

使用PUT方式更新之前创建的 id=1 的文档信息。

PUT /user/_doc/1
{"name": "李四"
}

可以发现这里只更新了name字段,没有更新其它的字段,所以其它字段默认会填充空值。

使用POST请求修改文档:

首先将没个字段的值都初始化

POST /user/_doc/1
{"name": "张三","age": 29,"salary": 100,"address": "北京市","remark": "来自中国北京市的张先生","birthDate": "1990-01-10"
}

然后再用POST请求执行修改文档操作:

POST方式第一种更新:

POST /user/_update/1/
{"doc": {"name": "王五"}
}

第一次结果:

"_version": 5,
"result": "updated"

第二次结果:

"_version": 5,
"result": "noop"

使用这种更新操作进行重复更新时,若数据与原先一致,则不进行任何操作。返回的结果是:"result": "noop",而不是"result" : "updated"

POST方式第二种更新:

POST /user/_doc/1
{"name":"赵六"
}

第一次结果:

"_version": 6,
"result": "updated"

第二次结果:

"_version": 7,
"result": "updated"

使用第二种更新操作时(即不带_update),无论是否重复更新,数据是否一致,都会进行更新,version版本相应增加。因此若使用PUT方式,结果也一致。

4.3 获取文档信息

获取 user的索引 id=1 的文档信息。

GET /user/_doc/1

[4.4]、删除文档信息

删除之前创建的 id=1 的文档信息。

DELETE /user/_doc/1

五、批量操作

有些情况下可以通过批量操作以减少网络请求。如:批量查询、批量插入数据等。

5.1 批量查询

POST user/_mget
{"ids" : [ "1", "mT245YABxusAxYeD-gUz" ]
}

注:POST user/_doc/_mget 类型没写则重写默认的类型,即_doc,如果写了ES会给一个系统警告,不过不影响结果

在Elasticsearch中,支持批量的插入、修改、删除操作,都是通过_bulk的api完成的。
请求格式如下:

{ action: { metadata }}
{ request body    }
{ action: { metadata }}
{ request body    }
...

注意:请求格式不同寻常,必须按照这种指定格式,如果不小心换行了,那么不好意思,执行报错。

5.2 单条插入数据

POST user/_doc
{"name":"周八","address":"广东省广州市花都区","remark":"公司底层码农员工","age":32,"salary":5000,"birthDate":"1987-09-26"}

5.3 批量插入数据

POST _bulk
{"create":{"_index":"user","_id":2001}}
{"name":"刘一","address":"广东省广州市花都区","remark":"公司底层码农员工","age":30,"salary":3000,"birthDate":"1989-11-11"}
{"create":{"_index":"user","_id":2002}}
{"name":"陈二","address":"广东省广州市花都区","remark":"公司底层码农员工","age":27,"salary":7900,"birthDate":"1992-01-25"}
{"create":{"_index":"user","_id":2003}}
{"name":"张三","address":"广东省广州市花都区","remark":"公司底层码农员工","age":28,"salary":8800,"birthDate":"1991-10-05"}
{"create":{"_index":"user","_id":2004}}
{"name":"李四","address":"广东省广州市花都区","remark":"公司底层码农员工","age":26,"salary":9000,"birthDate":"1993-08-18"}
{"create":{"_index":"user","_id":2005}}
{"name":"王五","address":"广东省广州市花都区","remark":"公司底层码农员工","age":31,"salary":4800,"birthDate":"1988-07-20"}

如果必须指定不好去掉配置就好了。

5.4 批量删除

POST _bulk
{"delete":{"_index":"user","_id":2001}}
{"delete":{"_index":"user","_id":2002}}
{"delete":{"_index":"user","_id":2003}}

六、简单的查询数据

查询所有文档信息

GET /user/_search

根据关键字查询文档信息,注意:text类型可以根据字段分词搜索,keyword关键词不会处理分词器

GET /user/_search?q=name:张三

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/393478.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第326题3的幂

题目: 题解: class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

[Git][分支设计规范]详细讲解

目录 0.概览1.master分支2.release分支3.develop分支4.feature分支5.hotfix分支 0.概览 以下是常用的分支和环境的搭配,可视情况而定不同的策略 分支名称适用环境master主分支生产环境release预发布分支预发布/测试环境develop开发分支开发环境feature需求开发分支本…

systemd-manage系统服务图形化管理工具使用教程

1. systemd-manage介绍 systemd-manage是一个开源的基于systemd服务管理的图形化工具,使用qt图形库进行开发,可以提供服务管理,用户会话,配置文件修改,日志查询,性能分析,进程管理等功能。图形…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展,AGV(自动导引车)作为一种重要的物流搬运设备,在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一,直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…

HTTPS协议讲解

HTTPS协议讲解 HTTPS是什么理解加密什么是加密为什么要加密 常见的加密方式对称加密非对称加密 数据摘要/数据指纹HTTPS的工作过程探究方案一,只使用对称加密方案二,只使用非对称加密方案三,双方都是用非对称加密方案四,非对称加密…

24/8/6算法笔记 不同核函数

import numpy as np from sklearn import datasets from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt 加载数据 X,ydatasets.load_wine(return_X_y True) d…

运维工作中对反爬虫的一些思考

最近运维工作中单位的网站被攻击,我们的反爬虫系统已经比较严格了,突然有5个用户登录30多万次经我们查找发现,用户是正常登录,这一异常被我们的技术部门捕捉到第一时间响应,没想到常规架构已经不足以应付现在的技术了&…

机器学习练手(二):基于KMeans的股票分类

总结:本文为和鲸python 机器学习原理与实践闯关训练营资料整理而来,加入了自己的理解(by GPT4o) 原活动链接 在前一关我们学习了逻辑回归,学会如何训练模型、数据基础性分析、如何处理空值等操作,下面我们…

springcloud loadbalancer nacos无损发布

前言 故事背景 jenkins部署时总是会有几秒钟接口调用报错,观察日志是因为流量被下发到已下线的服务,重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用&…

面试笔记8.6

缓存 1.如何保证redis与数据库一致性 redis面试:如何保证缓存和数据库数据的一致性?_使用update更新数据,json缓存不更新-CSDN博客 如果先删除缓存,再删除数据库,数据不一致, 解决 删 1.先操作缓存但不删除缓存&…

C#使用NPOI进行Excel和Word文件处理(二)

文章目录 使用NPOI在C#中处理Excel和Word文件1. 什么是NPOI?2. 安装NPOI2.1 VisualStudio2019引入NPOI 3. 处理Excel文件读取Excel文件写入Excel文件 4. 处理Word文件读取Word文件写入Word文件 总结Github 地址链接参考例子 使用NPOI在C#中处理Excel和Word文件 在C…

linux maven仓库 删除未下载完成的包 lastUpdated文件

以下命令查找.lastUpdated文件所在目录,并删除所在目录(maven包的版本目录)。 $ find ~/.m2/repository/ -regex ".*\.lastUpdated" | xargs dirname | xargs rm -rf查找未下载完成的文件 $ find ~/.m2/repository/ -regex ".*\.lastUp…

使用 docker 快速搭建独角数卡发卡网

docker版本的发卡程序搭建 项目1:https://github.com/assimon/dujiaoka 项目2(基于项目1):https://github.com/Apocalypsor/dujiaoka-docker 一键安装脚本 curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/m…

系统化学习 H264视频编码(06)哥伦布编码解读

说明:我们参考黄金圈学习法(什么是黄金圈法则?->模型 黄金圈法则,本文使用:why-what)来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法,理论方面会更多地讲清楚 音视频中概念的…

C语言典型例题28

《C程序设计教程(第四版)——谭浩强》 习题2.5 输入一个华氏温度,要求输出摄氏温度。公式为C5/9(F-32),要求输出要有文字说明,取两位小数 数学知识: (1)华氏温度与摄氏温度&#x…

E2000 RGMII0通讯异常问题总结

最近让新来小朋友做了一款E2000Q的板卡,使用了E2000Q上的两个RGMII资源,外接YT8521转出了电口。 但是他调试中遇到了一个比较奇怪的问题,两套YT8521的电路都一样,但是一路通一路不通。 也就是框图中MAC2(芯片RGMII0,系统对应eth1)那路网络不通,图中MAC3(芯片RGMII1,…

DITA发布PDF样式定制

- 1 - 概述 使用结构化写作/DITA写作,内容和样式是分离的。 编写的内容放在DITA文件中,样式是放在样式模板文件中。 而且针对不同的格式的输出(如:PDF,MS Word),样式模板文件不同。 文档工程…

【优秀python案例】基于百度贴吧的数据采集与文本分析设计与实现

数据采集实现: 对百度贴吧帖子数据的采集。首先,使用requests库发送HTTP请求,通过设置请求头模拟浏览器访问,获取网页的HTML内容。然后,利用BeautifulSoup库对HTML内容进行解析,以便提取所需的信息。 在循…

c# .net core项目角色授权机制

前言 角色授权机制是确保应用程序安全性的重要组成部分,它允许开发者根据用户的角色来限制对应用程序中不同资源的访问。 基本概念: 角色授权基于用户角色的访问控制,即根据用户所属的角色来决定其能够访问的资源或执行的操作。在.NET Cor…

k8s—ingress应用

一、ingress和ingress-controller ingress对象: 指的是k8s中的⼀个api对象/资源对象,⼀般⽤yaml配置。作⽤是定义请求如何转发到service的规则,可以理解为配置模板。 ingress-controller: 具体实现反向代理及负载均衡的程序&…