Elasticsearch文档操作
一、Elasticsearch的CURD
1、CURD之Create
PUT lqz/doc/1
{"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直"]
}
他明处貌似还有俩老婆:
PUT lqz/doc/2
{"name":"大娘子","age":18,"from":"sheng","desc":"肤白貌美,娇憨可爱","tags":["白", "富","美"]
}PUT lqz/doc/3
{"name":"龙套偏房","age":22,"from":"gu","desc":"mmp,没怎么看,不知道怎么形容","tags":["造数据", "真","难"]
}
家里红旗不倒,家外彩旗飘摇:
PUT lqz/doc/4
{"name":"石头","age":29,"from":"gu","desc":"粗中有细,狐假虎威","tags":["粗", "大","猛"]
}PUT lqz/doc/5
{"name":"魏行首","age":25,"from":"广云台","desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags":["闭月","羞花"]
}
注意:当执行PUT
命令时,如果数据不存在,则新增该条数据,如果数据存在则修改该条数据。
咱们通过GET
命令查询一下:
GET lqz/doc/1
结果如下:
{"_index" : "lqz","_type" : "doc","_id" : "1","_version" : 1,"found" : true,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}
}
查询也没啥问题,但是你可能说了,人家老二是黄种人,怎么是黑的呢?好吧咱改改desc
和tags
:
PUT lqz/doc/1
{"desc":"皮肤很黄,武器很长,性格很直","tags":["很黄","很长", "很直"]
}
上例,我们仅修改了desc
和tags
两处,而name
、age
和from
三个属性没有变化,我们可以忽略不写吗?查查看:
GET lqz/doc/1
结果如下:
{"_index" : "lqz","_type" : "doc","_id" : "1","_version" : 3,"found" : true,"_source" : {"desc" : "皮肤很黄,武器很长,性格很直","tags" : ["很黄","很长","很直"]}
}
哎呀,出事故了!修改是修改了,但结果不太理想啊,因为name
、age
和from
属性都没啦!
注意:**PUT
命令,在做修改操作时,如果未指定其他的属性,则按照指定的属性进行修改操作。**也就是如上例所示的那样,我们修改时只修改了desc
和tags
两个属性,其他的属性并没有一起添加进去。
很明显,这是病!dai治!怎么治?上车,咱们继续往下走!
2、CURD之Update
让我们首先恢复一下事故现场:
PUT lqz/doc/1
{"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直"]
}
我们要将黑修改成黄:
POST lqz/doc/1/_update
{"doc": {"desc": "皮肤很黄,武器很长,性格很直","tags": ["很黄","很长", "很直"]}
}
上例中,我们使用POST
命令,在id
后面跟_update
,要修改的内容放到doc
文档(属性)中即可。
我们再来查询一次:
GET lqz/doc/1
结果如下:
{"_index" : "lqz","_type" : "doc","_id" : "1","_version" : 5,"found" : true,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤很黄,武器很长,性格很直","tags" : ["很黄","很长","很直"]}
}
结果如上例所示,现在其他的属性没有变化,只有desc
和tags
属性被修改。
注意:POST
命令,这里可用来执行修改操作(还有其他的功能),POST
命令配合_update
完成修改操作,指定修改的内容放到doc
中。
写了这么多,我也发现我上面有讲的不对
的地方——石头不是跟顾老二不清不楚,石头是跟小桃不清不楚!好吧,刚才那个数据是一个错误示范!我们这就把它干掉!
3、CURD之Delete
DELETE lqz/doc/4
很简单,通过DELETE
命令,就可以删除掉那个错误示范了!
删除效果如下:
{"_index" : "lqz","_type" : "doc","_id" : "4","_version" : 4,"result" : "deleted","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 4,"_primary_term" : 1
}
我们再来查询一遍:
GET lqz/doc/4
结果如下:
{"_index" : "lqz","_type" : "doc","_id" : "4","found" : false
}
上例中,found:false
表示查询数据不存在。
4、CURD之Retrieve
我们上面已经不知不觉的使用熟悉这种简单查询方式,通过 GET
命令查询指定文档:
GET lqz/doc/1
结果如下:
{"_index" : "lqz","_type" : "doc","_id" : "1","_version" : 5,"found" : true,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤很黄,武器很长,性格很直","tags" : ["很黄","很长","很直"]}
}
二、Elasticsearch之查询的两种方式
1、前言
简单的没挑战,来点复杂的,elasticsearch提供两种查询方式:
- 查询字符串(query string),简单查询,就像是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索。
- 另外一种是通过DSL语句来进行查询,被称为DSL查询(Query DSL),DSL是Elasticsearch提供的一种丰富且灵活的查询语言,该语言以json请求体的形式出现,通过restful请求与Elasticsearch进行交互。
2、准备数据
PUT lqz/doc/1
{"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直"]
}PUT lqz/doc/2
{"name":"大娘子","age":18,"from":"sheng","desc":"肤白貌美,娇憨可爱","tags":["白", "富","美"]
}PUT lqz/doc/3
{"name":"龙套偏房","age":22,"from":"gu","desc":"mmp,没怎么看,不知道怎么形容","tags":["造数据", "真","难"]
}PUT lqz/doc/4
{"name":"石头","age":29,"from":"gu","desc":"粗中有细,狐假虎威","tags":["粗", "大","猛"]
}PUT lqz/doc/5
{"name":"魏行首","age":25,"from":"广云台","desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags":["闭月","羞花"]
}
3、查询字符串
GET lqz/doc/_search?q=from:gu
还是使用GET
命令,通过_serarch
查询,查询条件是什么呢?条件是from
属性是gu
家的人都有哪些。最后,别忘了_search
和from
属性中间的英文分隔符?
结果如下:
{"took" : 1,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎威","tags" : ["粗","大","猛"]}},{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}},{"_index" : "lqz","_type" : "doc","_id" : "3","_score" : 0.2876821,"_source" : {"name" : "龙套偏房","age" : 22,"from" : "gu","desc" : "mmp,没怎么看,不知道怎么形容","tags" : ["造数据","真","难"]}}]}
}
我们来重点说下hits
,hits
是返回的结果集——所有from
属性为gu
的结果集。重点中的重点是_score
得分,得分是什么呢?根据算法算出跟查询条件的匹配度,匹配度高得分就高。后面再说这个算法是怎么回事。
4、结构化查询
我们现在使用DSL方式,来完成刚才的查询,查看来自顾家的都有哪些人。
GET lqz/doc/_search
{"query": {"match": {"from": "gu"}}
}
上例,查询条件是一步步构建出来的,将查询条件添加到match
中即可,而match
则是查询所有from
字段的值中含有gu
的结果就会返回。
当然结果没啥变化:
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎威","tags" : ["粗","大","猛"]}},{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}},{"_index" : "lqz","_type" : "doc","_id" : "3","_score" : 0.2876821,"_source" : {"name" : "龙套偏房","age" : 22,"from" : "gu","desc" : "mmp,没怎么看,不知道怎么形容","tags" : ["造数据","真","难"]}}]}
}
三、term与match查询
1、match查询
1.1 准备数据
PUT lqz/doc/1
{"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直"]
}PUT lqz/doc/2
{"name":"大娘子","age":18,"from":"sheng","desc":"肤白貌美,娇憨可爱","tags":["白", "富","美"]
}PUT lqz/doc/3
{"name":"龙套偏房","age":22,"from":"gu","desc":"mmp,没怎么看,不知道怎么形容","tags":["造数据", "真","难"]
}PUT lqz/doc/4
{"name":"石头","age":29,"from":"gu","desc":"粗中有细,狐假虎威","tags":["粗", "大","猛"]
}PUT lqz/doc/5
{"name":"魏行首","age":25,"from":"广云台","desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags":["闭月","羞花"]
}
1.2 match系列之match(按条件查询)
我们查看来自顾家的都有哪些人。
GET lqz/doc/_search
{"query": {"match": {"from": "gu"}}
}
上例,查询条件是一步步构建出来的,将查询条件添加到match
中即可,而match
则是查询所有from
字段的值中含有gu
的结果就会返回。
结果如下:
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎
相关文章:

Elasticsearch文档操作
一、Elasticsearch的CURD 1、CURD之Create PUT lqz/doc/1 {"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直…...

聊一聊go的单元测试(goconvey、gomonkey、gomock)
文章目录 概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests 二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例 三、基准测试和模糊测试3.1、基准测试3.2、模糊测试 四、总结4.1、小结4.2、其他4.3、参考资料 概要…...

Positive Technologies 利用 PT Cloud Application Firewall 保护中小型企业的网络资源
云产品按月订购,无需购买硬件资源 PT Cloud Application Firewall 是 Positive Technologies 推出的首个用于保护网络应用程序的商用云产品。Web 应用层防火墙 (web application firewall, WAF) 现在可以通过 技术合作伙伴——授权服务商和云提供商以订购方式提供1…...

深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密
探索序列建模的基础知识和应用。 简介 序列建模是许多领域的一个重要问题,包括自然语言处理 (NLP)、语音识别和语音合成、时间序列预测、音乐生成和「生物信息学」。所有这些任务的共同点是它们需要坚持。接下来的事情的预测是基于历史的。例如,在“哈桑…...

vue项目本地开发构建速度优化 hard-source-webpack-plugin
1、为啥要优化本地构建速度 有些项目因为项目需求点多、功能复杂、管理混乱、引入第三方插件/样式库过多、本身项目页面较多、文件较多等等原因,会导致项目体积变大、本地构建速度明显变慢,这时就需要对项目webpack进行一些设置来提高打包效率、加快打包…...

燕之屋通过港交所聆讯:苦战IPO十余年,黄健等人提前精准套现
撰稿|行星 来源|贝多财经 11月19日,厦门燕之屋生物工程股份有限公司(下称“燕之屋”)通过港交所聆讯,并披露了聆讯后资料集(即招股书),中金公司和广发证券为其联席保荐人。 据贝多财经了解&a…...

【51单片机系列】C51基础
本文内容是关于C51语言的基础内容的,包括C51的数据类型、变量、运算符、函数以及reg52.h文件中的内容,有些与C中相同的内容没有记录在此,比如常量、某些变量、表达式、程序结构、数组等没有涉及。 文章目录 C51的数据类型1. C51中的基本数据类…...

openssl1.0.2版本Windows安装问题
之前安装过1.1版本,Windows环境下C 安装OpenSSL库 源码编译及使用(VS2019)_vs2019安装openssl_肥宝Fable的博客-CSDN博客 后来发现linux编译不过,以为是版本问题,相差太大,所以降一下版本,以免…...

【Java 进阶篇】Ajax 实现——原生JS方式
大家好,欢迎来到这篇关于原生 JavaScript 中使用 Ajax 实现的博客!在前端开发中,我们经常需要与服务器进行数据交互,而 Ajax(Asynchronous JavaScript and XML)是一种用于创建异步请求的技术,它…...

Spring Cloud Stream实践
概述 不同中间件,有各自的使用方法,代码也不一样。 可以使用Spring Cloud Stream解耦,切换中间件时,不需要修改代码。实现方式为使用绑定层,绑定层对生产者和消费者提供统一的编码方式,需要连接不同的中间…...

高精度算法【Java】(待更新中~)
高进度加法 在Java中可以使用BigInteger进行高精度计算,除此也可以仿照竖式相加的计算原理进行计算。 BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算࿱…...

说一说HTTP1.0、1.1、2.0版本区别和优化
说一说HTTP1.0、1.1、2.0版本区别和优化 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议。 在不同的版本中,HTTP经历了一系列的演进和改进,主要包括HTTP 1.0、HTTP 1.1和HTTP 2.0。 下面详细解释它们之间…...

51.Sentinel微服务保护
目录 (1)初识Sentinel。 (1.1)雪崩问题及解决方案。 (1.1.1)雪崩问题。 (1.1.2)解决雪崩问题的四种方式。 (1.1.3)总结。 (1.2)…...

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `ajax()`
嗨,亲爱的读者们!欢迎来到这篇关于使用 jQuery 中的 ajax() 方法进行 Ajax 请求的博客。在前端开发中,jQuery 提供了简便而强大的工具,其中 ajax() 方法为我们处理异步请求提供了便捷的解决方案。无需手动创建 XMLHttpRequest 对象…...

I.MX6ULL开发笔记(一)——环境搭建、镜像烧录、网络连接
本系列为使用野火IMX6ULL开发的学习笔记,使用的开发板为如下: 具有的硬件资源有如下: 文章目录 一、环境搭建Win11安装WSL安装串口驱动安装串口工具安装Ubuntu与windows文件互传 二、镜像烧录修改串口终端登录前信息 三、fire-config工具配…...

Javaweb之Ajax的详细解析
1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序,所以…...

java基于RestTemplate的微服务发起http请求
实现的效果...

django理解02 前后端分离中的问题
前后端分离相对于传统方式的问题 前后端数据交换的问题跨域问题 页面js往自身程序(django服务)发送请求,这是浏览器默认接受响应 而请求其它地方是浏览器认为存在潜在危险。自动隔离请求!!! 跨域问题的解决…...

设计模式-迭代器模式-笔记
动机(Motivaton) 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们呢希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一…...

【数据结构】C语言实现队列
目录 前言 1. 队列 1.1 队列的概念 1.2 队列的结构 2. 队列的实现 2.1 队列的定义 2.2 队列的初始化 2.3 入队 2.4 出队 2.5 获取队头元素 2.6 获取队尾元素 2.7 判断空队列 2.8 队列的销毁 3. 队列完整源码 Queue.h Queue.c 🎈个人主页:…...

牛客——OR36 链表的回文结构(C语言,配图,快慢指针)
目录 思路一:链表翻转 思路二:快慢指针,分别从头和尾间开始比较 本题是没有对C的支持的,但因为CPP支持C,所以这里就用C写了,可以面向更多用户 链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 思路一&am…...

Docker build 技巧 —— 筑梦之路
实现目标 更快的构建速度 更小的Docker镜像大小 更少的Docker镜像层 充分利用镜像缓存 增加Dockerfile可读性 让Docker容器使用起来更简单 如何实现 编写.dockerignore文件 容器只运行单个应用 将多个RUN指令合并为一个 基础镜像的标签不要用latest 每个RUN指令后删除…...

2 Redis的高级数据结构
1、Bitmaps 首先,最经典的应用场景就是用户日活的统计,比如说签到等。 字段串:“dbydc”,根据对应的ASCII表,最后可以得到对应的二进制,如图所示 一个字符占8位(bit),…...

Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

update_engine-FilesystemVerifierAction和PostinstallRunnerAction
在介绍完了DownloadAction之后,还剩下FilesystemVerifierAction和PostinstallRunnerAction,下面开始对其进行分析。 FilesystemVerifierAction 在数据下载完成后,在DownloadAction中会切换到FilesystemVerifierAction void DownloadAction:…...

深度学习乳腺癌分类 计算机竞赛
文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...

【Python百宝箱】掌握Python Web开发三剑客:Flask、Django、FastAPI一网打尽
前言 在当今互联网时代,Web应用的开发变得愈发重要和复杂。选择一个合适的Web框架,掌握安全性与认证、数据库与ORM库、前端框架与交互、测试与调试工具等关键知识点,是每个Web开发者都必须面对的挑战。本文将带你深入了解三个流行的Python W…...

【人工智能时代的刑法体系与责任主体概述】
第一节:引言 随着科技的快速发展,人工智能 (Artificial Intelligence, AI) 正日益成为我们生活中不可或缺的一部分。从自动驾驶汽车到语音助手,从智能家居到金融机器人,AI 的广泛应用正不断改变着我们的生活方式和社会结构。然而…...

透视maven打包编译正常,intellj idea编译失败问题的本质
前言 maven多模块类型的项目,在Java的中大型应用中非常常见, 在 module 很多的情况,经常会出现各种各样的编辑依赖错误问题,今天记录一种比较常见的 case : A 子模块依赖 B 子模块,在 Terminal 上终端上 …...

npm报错
npm报错 npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! npm ERR! For a full report s…...