ES 06 - 通过Kibana插件增删改查ES中的索引文档
向ES中添加文档时, ES会根据文档中各个字段的类型, 自动推测并创建映射(mapping), 这是比Solr灵活的地方;
这在大部分情况下是可用的, 但生产环境中不建议如此使用: 应该根据业务需求定制mapping映射. 关于定制mapping, 请参考后续文章.
1 创建、删除索引
1.1 创建索引
# 创建索引API:
PUT test_index?pretty
# 响应信息如下:
#! Deprecation: the default number of shards will change from [5] to [1] in 7.0.0;
# if you wish to continue using the default of [5] shards, you must manage this on the create index request or with an index template
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "test_index"
}
# 查看集群中的索引:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open test_index hMeJ-M9pSHSXl0t39OedYw 5 1 0 0 1.2kb 1.2kb
yellow open .kibana_1 4q7ELvdcTVilW3UwtMWqeg 1 0 18 0 78.5kb 78.5kb
过时说明:
在创建索引时, Elasticsearch提出过时警告: 从7.0.0版本开始, 默认的Shard个数将从[5]变为[1].
如果要继续使用默认的[5]个分片(Shard), 就需要在创建Index时指定, 或者通过索引模板创建Index.
关于创建Index时指定分片个数的方法, 参见后续的博文.
2.2 删除索引
# 删除索引API:
DELETE test_index?pretty
# 响应信息如下:
{
"acknowledged": true
}
2 document的结构
ES是一款面向文档的数据搜索、分析引擎. document结构说明:
(1) 基于面向对象的开发思想, 应用系统中的数据结构都是很复杂的: 对象中嵌套对象, 如CRM系统中的客户对象中, 还会嵌入客户相关的企业对象.
(2) 对象数据存储到数据库中, 需要分解, 将嵌套对象分解为扁平的多张表数据, 每次操作时需要还原回对象格式, 过程繁琐.
(3) ES存储的是JSON格式的文档, 基于此, ES可以提供复杂的索引, 全文检索, 分析聚合等功能.
(4) document格式示例:
{
"id": "5220",
"name": "张三",
"sex": "男",
"age": 25,
"phone": 13312345678,
"email": "zhangsan@163.com",
"company": {
"name": "Alibaba",
"location": "杭州"
},
"join_date": "2018/11/01"
}
接下来以电商系统中的搜索子系统为例, 演示对文档的操作方法.
3 添加文档
(1) 添加API:
PUT index/type/id
{
"JSON格式的文档数据"
}
说明: ES会自动创建PUT API中指定的index和type, 不需要提前创建;
而且ES默认对document的每个field都建立倒排索引, 保证它们都可以被检索.
(2) 添加示例:
PUT book_shop/it_book/1
{
"name": "Java编程思想",
"author": "[美] Bruce Eckel",
"category": "编程语言",
"desc": "Java学习必读经典,殿堂级著作!",
"price": 109.0,
"publisher": "机械工业出版社",
"date": "2007-06-01",
"tags": [ "Java", "编程语言" ]
}
(3) 添加之后的响应信息:
{
"_index" : "book_shop",
"_type" : "it_book",
"_id" : "1",
"_version" : 1,
"result" : "created", # 操作结果: created(创建)了索引
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
(4) 再添加如下数据:
PUT book_shop/it_book/2
{
"name": "深入理解Java虚拟机:JVM高级特性与最佳实践",
"author": "周志明",
"category": "编程语言",
"desc": "Java图书领域公认的经典著作",
"price": 79.0,
"date": "2013-10-01",
"publisher": "机械工业出版社",
"tags": [ "Java", "虚拟机", "最佳实践" ]
}
PUT book_shop/it_book/3
{
"name": "Java并发编程的艺术",
"author": "方腾飞,魏鹏,程晓明",
"category": "编程语言",
"desc": "阿里系工程师的并发编程实践",
"price": 59.0,
"date": "2015-07-10",
"publisher": "机械工业出版社",
"tags": [ "Java", "并发编程" ]
}
4 查询文档
(1) 检索API:
GET index/type/id
(2) 检索示例:
GET book_shop/it_book/2
(3) 检索的结果:
{
"_index" : "book_shop1",
"_type" : "it_book",
"_id" : "2",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "深入理解Java虚拟机:JVM高级特性与最佳实践",
"author" : "周志明",
"category" : "编程语言",
"desc" : "Java图书领域公认的经典著作",
"price" : 79.0,
"date" : "2013-10-01",
"publisher" : "机械工业出版社",
"tags" : [
"Java",
"虚拟机",
"最佳实践"
]
}
}
5 修改文档
5.1 替换文档
(1) 替换API - 与添加API相同, 只不过文档id要存在, 此时系统将判定为修改操作:
—— 无论文档数据是否存在修改, 对同一id的文档执行1次以上的PUT操作, 都是修改操作.
PUT index/type/id
{
"JSON格式的文档数据"
}
注意: 替换方式的不便之处: 必须填写要修改文档的所有field, 如果缺少, 修改后的文档中将丢失相关field.
(2) 替换示例 - 为name添加了"(第4版)"
PUT book_shop/it_book/1
{
"name": "Java编程思想(第4版)",
"author": "[美] Bruce Eckel",
"category": "编程语言",
"desc": "Java学习必读经典,殿堂级著作!",
"price": 109.0,
"date": "2007-06-01",
"publisher": "机械工业出版社",
"tags": [ "Java", "编程语言" ]
}
(3) 替换的结果信息:
{
"_index" : "book_shop",
"_type" : "it_book",
"_id" : "1",
"_version" : 2,
"result" : "updated", // 操作结果: updated(修改)了索引
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
5.2 更新文档
(1) 更新API:
—— 通过POST和_update, 更新文档中的特定字段(field), 其他的字段不会改动.
POST index/type/id/_update
{
"doc": {
"field u want to update": "new value of ur update's field"
}
}
注意: 与替换方式相比, 更新方式的好处: 可以更新指定文档的指定field, 未指定的field也不会丢失.
(2) 更新示例 - 将name改为英文:
POST book_shop/it_book/1/_update
{
"doc": {
"name": "Thinking in Java(4th Edition) "
}
}
(3) 更新的结果信息:
{
"_index" : "book_shop",
"_type" : "it_book",
"_id" : "1",
"_version" : 3,
"result" : "updated", // 操作结果: updated(修改)了索引
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
此时查看该文档 GET book_shop/it_book/1, 可以发现更新成功.
6 删除文档
(1) 删除API:
DELETE index/type/id
(2) 删除示例:
DELETE book_shop/it_book/1
(3) 删除的结果信息:
{
"_index" : "book_shop",
"_type" : "it_book",
"_id" : "1",
"_version" : 4,
"result" : "deleted", // 操作结果: deleted(删除)了索引
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
(4) 删除确认: 再次查看删除的文档:
GET book_shop/it_book/1
(5) 确认的信息:
{
"_index" : "book_shop",
"_type" : "it_book",
"_id" : "1",
"found" : false // 没有查找到相关文档
}
为了后期演示的方便, 再次将该文档添加至索引中:
PUT book_shop/it_book/1
{
"name": "Java编程思想(第4版)",
"author": "[美] Bruce Eckel",
"category": "编程语言",
"desc": "Java学习必读经典,殿堂级著作!",
"price": 109.0,
"date": "2007-06-01",
"publisher": "机械工业出版社",
"tags": [ "Java", "编程语言" ]
}
版权声明
出处: 博客园 马瘦风的博客(https://www.cnblogs.com/shoufeng)
感谢阅读, 如果文章有帮助或启发到你, 点个[好文要顶
ES 06 - 通过Kibana插件增删改查ES中的索引文档的更多相关文章
- ES 17 - (底层原理) Elasticsearch增删改查索引数据的过程
目录 1 增删改document的流程 1.1 协调节点 - Coordinating Node 1.2 增删改document的流程 2 查询document的流程 1 增删改document的流程 ...
- datatables 前端表格插件 增删改查功能
官方网站:http://datatables.club/example/<!-- DataTables CSS -->css引入的<link rel="stylesheet ...
- 使用Enitity Framework实现增删改查服务中的一些通用思路
添加 → 方法参数中有一个有关添加视图模型类型的形参,比如vm→ 根据vm的某个属性,比如Name判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常→ 判断vm所 ...
- 映射文件中增删改查标签中的parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中. resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射 ...
- ES 04 - 安装Kibana插件(6.6.0版本)
目录 1 Kibana是什么 2 安装并启动Kibana 2.1 准备安装包 2.2 修改配置文件 2.3 启动Kibana并验证 2.4 关闭Kibana服务 3 Kibana功能测试 3.1 关于 ...
- Android 系统API实现数据库的增删改查和SQLite3工具的使用
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- FoxOne---一个快速高效的BS框架--生成增删改查
FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...
- mongodb的学习笔记一(集合和文档的增删改查)
1数据库的增删改查 一.增加一个数据库: use blog-----切换到指定的数据库,如果数据库不存在,则自动创建该数据库(新建的数据库,如果没有存储对应的集合,是不会显示出来的) 二.删除一个数据 ...
随机推荐
- (一)JUnit简介
单元测试是测试应用程序的功能是否能够按需要正常进行,是一个对单一实体(类或方法)的测试. JUnit是一个Java编程语言的单元测试框架. 单元测试框架是一部分代码,可以确保另一端代码(方法)按预期工 ...
- JAVA经典算法40题(原题+分析)之原题
JAVA经典算法40题(上) [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程 ...
- instrument(2)
学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的.其实有时候的需求很简单,无非就是看下类里的方法啊之类的.javassist是基于 ...
- BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树
BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树 题意: 约翰的奶牛们从小娇生惯养,她们无法容忍牛棚里的任何脏东西.约翰发现,如果要使这群 ...
- 关于CocoaPods的ruby镜像文件问题
项目遇到第三方库更新问题 时 用到cocoaPods更换淘宝ruby镜像问题的时候 报错 后来 又在别处找了下 发现 用的是 https 如下: 后来细想 可能跟Xcode7 要求HTTPs ...
- iOS 社交化分享功能
iOS 开发过程中可能会遇到需要进行第三方分享的需求,比如向QQ,微信,微博等分享 如下图 我们今天要讲到的方式是使用了一个第三方工具: http://www.sharesdk.cn 一,注册账号 去 ...
- CentOS7解决firefox无法启用ibus中文输入的问题
最近换电脑,要换掉使用了6年的旧环境,开始折腾重装系统: 下了minimal版本的CentOS7.4,然后开始一点点装想用的东西,多少找到一点十年前折腾LFS的感觉:然后竟然被输入法拌住了半天,事后回 ...
- java游戏开发杂谈 - 游戏物体
现实生活中,有很多物体,每个物体的长相.行为都不同. 物体存在于不同的空间内,它只在这个空间内发生作用. 物体没用了,空间就把它剔除,不然既占地方,又需要花精力管理. 需要它的时候,就把它造出来,不需 ...
- Hibernate内容详解
一:引入Hibernate的jar包 http://t.cn/EioD1xk 二:配置Hibernate的核心配置文件hibernate.cfg.xml <!DOCTYPE hibernate- ...
- Centos7 nginx 虚拟主机、反向代理服务器及负载均衡,多台主机分离php-fpm实验,之强化篇,部署zabbix为例
一.简介 1.由于zabbix是php得,所有lnmp环境这里测试用的上一个实验环境,请查看https://www.cnblogs.com/zhangxingeng/p/10330735.html : ...