elasticSearch的索引库文档的增删改查
我们都知道,elasticsearch在进行搜索引擎的工作时,是会先把数据库中的信息存储一份到elasticsearch中,再去分词查询等之后的工作的。
elasticsearch中的文档数据会被序列化为json格式后存储在elasticsearch中。elasticsearch会对存储的数据进行分类管理,相同类型的放在一起。
索引:相同类型的文档的集合(即同一类型数据的集合)叫索引(这个不是MySQL中的那个索引),为了区分开,我们通常把这的索引叫索引库(对应的mysql数据库中的table表)。
映射:索引中文档的字段约束信息,类似表的结构约束。常见的mapping映射有:
type: 字段数据类型,常见类型有:1、字符串:text(可分词)、keyword(精确值,不可分词,比如品牌名) ; 2、数值: long、integer、short、byte、double、float ;3、布尔:boolean; 4、日期: date; 5、对象: object
index:是否创建索引,默认是true。看看在实际搜索时你会不会根据这个字段进行筛选查询,不会用到,就false。
analyser:分词器,只有text类型才会分词
properties :该字段的子字段,只有object才会用到。
#创建索引库并设置mapping映射
PUT /heima
{
"mappings": {
"properties": {
"info":{
"type": "text"
, "analyzer": "ik_smart"
},
"age":{
"type": "byte"
},
"email":{
"type": "keyword"
, "index": false
},
"name":{
"type": "object",
"properties": {
"firstName": {
"type": "keyword"
},
"lastName": {
"type": "keyword"
}
}
}
}
}
}
#查询索引库
GET /heima
#删除索引库
DELETE /heima
这代码意思是我们创建的索引库 名叫 /heima 其中属性用info 、age、email、name(子属性 firstName、lastName);
修该操作有点特殊,不支持对索引库中已有的字段进行修改,但可以新增没有的字段
#修改索引库,不支持对已有的索引库做出修改,但可以添加新的字段
PUT /heima/_mapping
{
"properties":{
"info":{
"type":"keyword"
}
}
}
下面是对索引库中文档的增删改查:
#新增文档 post /索引库名/_doc/文档id
POST /heima/_doc/1
{
"age":21,
"email":"****1",
"info":"黑马程序员Java学习",
"name":{
"firstName":"yun",
"lastName":"zhao"
}
}
#查询文档
GET /heima/_doc/1
#删除文档
DELETE /heima/_doc/1
同样,修改操作有点特殊,有俩种方式:
#方法一:全量修改,会删除旧文档,添加新文档,文档内所有字段都需要写一遍
#如果修改的文档id对应文档不存在,修改操作就会变为新增操作
PUT /heima/_doc/1
{
"age":21,
"email":"****2",
"info":"黑马程序员Java学习",
"name":{
"firstName":"yun",
"lastName":"zhao"
}
}
#方法二:增量修改,修改指定字段
POST /heima/_update/1
{
"doc": {
"email":"*****3"
}
}
批量处理:同时新增、删除、更新多个数据:
#批量处理 index为新增,注意!新增的各个字段必须写在同一行中。
POST /_bulk
{"index":{"_index":"heima","_id":3}}
{"info":"黑马程序员Java学习3","age":23,"email":"****3","name":{"firstName":"wu","lastName":"wang"}}
{"index":{"_index":"heima","_id":4}}
{"info":"黑马程序员Java学习4","age":24,"email":"****4","name":{"firstName":"liu","lastName":"liu"}}
#批量删除 delete为删除
POST /_bulk
{"delete":{"_index":"heima","_id":3}}
{"delete":{"_index":"heima","_id":4}}
#批量更新 update 。 doc中写要更新的字段
POST /_bulk
{"update":{"_id":3,"_index":"heima"}}
{"doc":{"email":"****3.1"}}
{"update":{"_id":4,"_index":"heima"}}
{"doc":{"email":"****4.1"}}
推荐阅读
-
实战!基于JSP的登录注册功能开发(包含增删改查及网页、数据库操作)
-
使用Servlet、JSP和JavaBean进行Web数据库的增删改查操作
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
elasticSearch的索引库文档的增删改查
-
深入理解ElasticSearch:索引、类型与文档的关系
-
全面了解MySQL数据库的增删改查操作:深入解析3.1全列查询
-
使用Java/JavaWeb实现数据库的增删改查操作