向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://healchow.com)

出处: 博客园 马瘦风的博客(https://www.cnblogs.com/shoufeng)

感谢阅读, 如果文章有帮助或启发到你, 点个[好文要顶

ES 06 - 通过Kibana插件增删改查ES中的索引文档的更多相关文章

  1. ES 17 - (底层原理) Elasticsearch增删改查索引数据的过程

    目录 1 增删改document的流程 1.1 协调节点 - Coordinating Node 1.2 增删改document的流程 2 查询document的流程 1 增删改document的流程 ...

  2. datatables 前端表格插件 增删改查功能

    官方网站:http://datatables.club/example/<!-- DataTables CSS -->css引入的<link rel="stylesheet ...

  3. 使用Enitity Framework实现增删改查服务中的一些通用思路

    添加 → 方法参数中有一个有关添加视图模型类型的形参,比如vm→ 根据vm的某个属性,比如Name判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常→ 判断vm所 ...

  4. 映射文件中增删改查标签中的parameterType和resultType

    parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中. resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射 ...

  5. ES 04 - 安装Kibana插件(6.6.0版本)

    目录 1 Kibana是什么 2 安装并启动Kibana 2.1 准备安装包 2.2 修改配置文件 2.3 启动Kibana并验证 2.4 关闭Kibana服务 3 Kibana功能测试 3.1 关于 ...

  6. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  7. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  8. FoxOne---一个快速高效的BS框架--生成增删改查

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  9. mongodb的学习笔记一(集合和文档的增删改查)

    1数据库的增删改查 一.增加一个数据库: use blog-----切换到指定的数据库,如果数据库不存在,则自动创建该数据库(新建的数据库,如果没有存储对应的集合,是不会显示出来的) 二.删除一个数据 ...

随机推荐

  1. [转]树莓派.设置自动重连WiFi

    由于不可知的原因,有可能会导致树莓派失去连接,这时候需要重新连接WiFi. 自动重连的原理是,定期查看是否断网,如果断网了重启WiFi,参考的文章是这篇,第一步略有修改. 1.Python 代码 au ...

  2. bzoj 2120 数颜色 带修改莫队

    带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...

  3. kmspico_setup.exe运行提示系统资源不足,无法完成请求的服务

    在使用KMSpico激活office时,windows下运行exe会提示系统资源不足,无法完成请求的服务. 我的解决方法是:卸载电脑上的wps...

  4. Windows上安装配置SSH教程(1)——知识点汇总

    1.是什么SSH? 维基百科:https://zh.wikipedia.org/wiki/Secure_Shell 其他博客:http://www.ruanyifeng.com/blog/2011/1 ...

  5. mysql获取表中日期的年月日时分秒

    SELECT year(callTheRollTime) from schedule_account 获取年 SELECT month(callTheRollTime) from schedule_a ...

  6. netty源码学习

    概述 Netty is an asynchronous event-driven network application framework for rapid development of main ...

  7. 小程序 表单 获取 formId

    微信小程序使用模板消息需要使用支付prepay_id或表单提交formId, 要获得 formId 需要在 form 标签中声明属性    report-submit="true" ...

  8. 机器学习——KMeans聚类,KMeans原理,参数详解

    0.聚类 聚类就是对大量的未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小,聚类属于无监督的学习方法. 1.内在相似性的度量 聚类是根据数据 ...

  9. [译]PEP 342--增强型生成器:协程

    PEP原文 : https://www.python.org/dev/peps/pep-0342/ PEP标题: Coroutines via Enhanced Generators PEP作者: G ...

  10. 学习 JavaScript(二)在 HTML 中使用 JS

    基本用法 在 HTML 中使用 <script> 元素引入 Javascript , <script> 有以下 4 个常用属性: async: 异步加载,只对外部脚步有效. d ...