ES(ElasticSearch)文档的表现形式以及增删改查
1、 ES中的文档
ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
ES使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
_index:索引库,类似于关系型数据库里的“数据库”—它是我们存储和索引关联数据的地方。
_type:类型,类似于关系型数据库中表。可以是大写或小写,不能包含下划线或逗号。我们将使用 employee 做为类型名。
_id:与 _index 和 _type 组合时,就可以在ELasticsearch中唯一标识(类似于主键)一个文档。当创建一个文档,你可以自定义 _id ,也可以让Elasticsearch帮你自动生成。
另外还包括:
_uid:文档唯一标识(_type#_id)
_source:文档原始数据
_all:所有字段的连接字符串

2、文档的增删改
我们以员工对象为例,我们首先要做的是存储员工数据,每个文档代表一个员工。在ES中存储数据的行为就叫做索引(indexing),文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以简单的对比传统数据库和ES的对应关系:
关系数据库(MYSQL) -> 数据库DB-> 表TABLE-> 行ROW-> 列Column
Elasticsearch -> 索引库Indices (数据库)-> 类型Types(表) -> 文档Documents(行) -> 字段Fields(列)
ES集群可以包含多个索引(indices)(数据库),每一个索引库中可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
创建索引文档
①使用自己的ID创建:
PUT{index}/{type}/{id}
{
"field": "value",
...
}
②ES内置ID创建:
POST{index}/{type}/
{
"field": "value",
...
}
①②ES响应内容:
{
"_index": "wang",
"_type": "employee",
"_id": xxxxxx,
"_version": 1, //文档版本号
"created": true //是否新增
}
③ 获取指定ID的文档
GET wang/employee/123?pretty
③返回的内容:
{
"_index" : "wang",
"_type" : "employee",
"_id" : "123",
"_version" : 1,
"found" : true,
"_source" : {
"email": "sss@qq.cn",
"fullName": "张三",
...
"joine_date": "2016-06-01"
}
}
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
返回文档的部分字段:
GET默认返回整个文档,通过GET /wang/employee/123?_source=fullName,email
只返回文档内容,不要元数据:
GET wang/employee/123/_source
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
④ 修改文档
更新整个文档
同PUT {index}/{type}/{id}
在响应中,我们可以看到Elasticsearch把 _version 增加了。
{
...
"_version" : 2,
"created": false
}
created 标识为 false 因为同索引、同类型下已经存在同ID的文档。
在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问它。Elasticsearch会在你继续索引更多数据时清理被删除的文档。
局部更新文档
接受一个局部文档参数 doc,它会合并到现有文档中,对象合并在一起,存在的标量字段被覆盖,新字段被添加。
POST wang/employee/123/_update
{
“doc”{
"email" : "sss@qq.cn",
"salary": 1000
}
}
email会被更新覆盖,salary会新增。
这个API 似乎 允许你修改文档的局部,但事实上Elasticsearch
遵循与之前所说完全相同的过程,这个过程如下:
1. 从旧文档中检索JSON
2. 修改它
3. 删除旧文档
4. 索引新文档
脚本更新文档
也可以通过使用简单的脚本来进行。这个例子使用一个脚本将age加5:
POST wang/emploee/123/_update
{
"script" : "ctx._source.age += 5"
}
在上面的例子中, ctx._source指向当前被更新的文档。
注意,目前的更新操作只能一次应用在一个文档上。
删除文档
DELETE {index}/{type}/{id}
存在文档的返回:
{
"found" : true,
"_index" : "wang",
"_type" : "blog",
"_id" : "123",
"_version" : 3
}
不存在的返回:
{
"found" : false,
"_index" : "wang",
"_type" : "blog",
"_id" : "123",
"_version" : 4
}
注意:尽管文档不存在,但_version依旧增加了。这是内部记录的一部分,它确保在多节点间不同操作可以有正确的顺序。
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
批量操作bulk API
使用单一请求来实现多个文档的create、index、update 或 delete。
Bulk请求体格式:
{ action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n
每行必须以 "\n" 符号结尾,包括最后一行。这些都是作为每行有效的分离而做的标记。
create当文档不存在时创建之。
index创建新文档或替换已有文档。
update局部更新文档。
delete删除一个文档。
例如:
POST _bulk
{ "delete": { "_index": "wang", "_type": "employee", "_id": "123" }}
{ "create": { "_index": "wang", "_type": "blog", "_id": "123" }}
{ "title": "我下班了" }
{ "index": { "_index": "wang", "_type": "blog" }}
{ "title": "我真的下班了" }
注意:delete后不需要请求体,最后一行要有回车。
3、文档的简单查询
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
3.1 通过文档ID获取
略
GET /test/employee/1
3.2 批量获取
mget API参数是一个 docs数组,数组的每个节点定义一个文档的 _index 、 _type 、 _id 元数据。如果你只想检索一个或几个确定的字段,也可以定义一个 _source 参数:
方式1:GET _mget
{
"docs" : [
{
"_index" : "itsource",
"_type" : "blog",
"_id" : 2
},
{
"_index" : "itsource",
"_type" : "employee",
"_id" : 1,
"_source": "email,age"
}
]
}
方式2:同一个索引库的同一个类型下
GET itsource/blog/_mget
{
"ids" : [ "2", "1" ]
}
3.3 空搜索-查询所有
没有指定任何的查询条件,只返回集群索引中的所有文档:
GET test/employee/_search 查询所有的employee
GET _search
3.4 分页搜索
和SQL使用 LIMIT from,size关键字返回只有一页的结果一样,Elasticsearch接受 from 和 size 参数:
size : 每页条数
from : 跳过开始的结果数
如果你想每页显示5个结果,页码从1到3,那请求如下:
GET crm/emp/_search?size=5 #查询5条
GET crm/emp/_search?size=5&from=5 #查询6-10
GET crm/emp/_search?size=5&from=10 #查询11-15
3.5 查询字符串搜索
一个搜索可以用纯粹的uri来执行查询。在这种模式下使用搜索,并不是所有的选项都是暴露的。它可以方便快速进行 curl 测试。
Sql查询:
查询年龄为25岁的员工
GET itsource/employee/_search?q=age:25
如果q后的参数不指定Fileds则默认查询_all字段(隐含的文档所有字段的连接内容)
类似的查询语法参考lucene,如:
组合查询:
+表示并且,多个条件做且运算====>MUST
空格表示或,多个条件做或运算====>SHOULD
-表示非,多个条件做非运算====>MUST_NOT
+name:john +tweet:mary
+name:(mary john) +date:>2014-09-10 +(aggregations geo)
age[20 TO 30]
Select name,age from t_emp where age between and 10 order by age desc;
|
创建索引文档 ①使用自己的ID创建: PUT{index}/{type}/{id} { "field": "value", ... } ②ES内置ID创建: POST{index}/{type}/ { "field": "value", ... } ①②ES响应内容: { "_index": "itsource", "_type": "employee", "_id": xxxxxx, "_version": 1, //文档版本号 "created": true //是否新增 } ③ 获取指定ID的文档 GET itsource/employee/123?pretty ③返回的内容: { "_index" : "itsource", "_type" : "employee", "_id" : "123", "_version" : 1, "found" : true, "_source" : { "email": "wb@itsource.cn", "fullName": "文兵", ... "joine_date": "2016-06-01" } } 返回文档的部分字段: GET默认返回整个文档,通过GET /itsource/employee/123?_source=fullName,email 只返回文档内容,不要元数据: GET itsource/employee/123/_source 只检查文档是否存在(查询头信息): curl -i -X HEAD http://localhost:9200/itsource/employee/123 ④ 修改文档 更新整个文档 同PUT {index}/{type}/{id} 在响应中,我们可以看到Elasticsearch把 _version 增加了。 { ... "_version" : 2, "created": false } created 标识为 false 因为同索引、同类型下已经存在同ID的文档。 在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问它。Elasticsearch会在你继续索引更多数据时清理被删除的文档。 局部更新文档 接受一个局部文档参数 doc,它会合并到现有文档中,对象合并在一起,存在的标量字段被覆盖,新字段被添加。 POST itsource/employee/123/_update { “doc”{ "email" : "wb@itsource.cn", "salary": 1000 } } email会被更新覆盖,salary会新增。 这个API 似乎 允许你修改文档的局部,但事实上Elasticsearch 遵循与之前所说完全相同的过程,这个过程如下: 1. 从旧文档中检索JSON 2. 修改它 3. 删除旧文档 4. 索引新文档 脚本更新文档 也可以通过使用简单的脚本来进行。这个例子使用一个脚本将age加5: POST itsource/emploee/123/_update { "script" : "ctx._source.age += 5" } 在上面的例子中, ctx._source指向当前被更新的文档。 注意,目前的更新操作只能一次应用在一个文档上。 删除文档 DELETE {index}/{type}/{id} 存在文档的返回: { "found" : true, "_index" : "website", "_type" : "blog", "_id" : "123", "_version" : 3 } 不存在的返回: { "found" : false, "_index" : "website", "_type" : "blog", "_id" : "123", "_version" : 4 } 注意:尽管文档不存在,但_version依旧增加了。这是内部记录的一部分,它确保在多节点间不同操作可以有正确的顺序。 |
|
批量操作bulk API 使用单一请求来实现多个文档的create、index、update 或 delete。 Bulk请求体格式: { action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body }\n 每行必须以 "\n" 符号结尾,包括最后一行。这些都是作为每行有效的分离而做的标记。 create当文档不存在时创建之。 index创建新文档或替换已有文档。 update局部更新文档。 delete删除一个文档。 例如: POST _bulk { "delete": { "_index": "itsource", "_type": "employee", "_id": "123" }} { "create": { "_index": "itsource", "_type": "blog", "_id": "123" }} { "title": "我发布的博客" } { "index": { "_index": "itsource", "_type": "blog" }} { "title": "我的第二博客" } 注意:delete后不需要请求体,最后一行要有回车 |
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
mso-style-qformat:yes;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
ES(ElasticSearch)文档的表现形式以及增删改查的更多相关文章
- 使用DOM进行xml文档的crud(增删改查)操作<操作详解>
很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...
- XML——对XML文档的创建与增删改查
一.创建的第一种方式 //1.创建一个XML文档 XmlDocument doc = new XmlDocument(); //2.创建第一行描述信息 XmlDeclaration dec = do ...
- Elasticsearch 单模式下API的增删改查操作
<pre name="code" class="html">Elasticsearch 单模式下API的增删改查操作 http://192.168. ...
- ES 16 - 对Elasticsearch中的索引数据进行增删改查 (CRUD)
目录 1 创建document 1.1 创建时手动指定id 1.2 创建时自动生成id 2 查看document 2.1 根据id查询文档 2.2 通过_source字段控制查询结果 3 修改docu ...
- Vue+Mock.js模拟登录和表格的增删改查
有三类人不适合此篇文章: "喜欢站在道德制高点的圣母婊" -- 适合去教堂 "无理取闹的键盘侠" -- 国际新闻版块欢迎你去 "有一定基础但又喜欢逼逼 ...
- Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查
今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...
- head插件对elasticsearch 索引文档的增删改查
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200 ...
- Elasticsearch 索引文档的增删改查
利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...
随机推荐
- Highcharts error #16: www.highcharts.com/errors/16 js 单例
一.问题项目某一个页面用的highcharts用来显示一张图表,第一次刷新正常,第二次就出来这个错.1二.解决问题过程在网上找了很多同样是这个错误的解决方案. 第一:加载了highstock.js然后 ...
- scylladb docker-compose 用户密码认证配置
scylladb 对于用户的认证配置还是比较简单的,以下是一个docker-compose 配置的说明 环境准备 docker-compose 文件 version: "3" se ...
- Linux 系统管理——账号管理
一.用户账号管理 1.用户账户概述 用户账户的常见分类: 超级用户:root uid=0 gid=0 权限最大 普通用户:uid>=500 做一般权限的系统管理,权限有限. 程序用户:1 ...
- 洛谷 P4779 【模板】单源最短路径(标准版) 题解
P4779 [模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100 ...
- 我的Android前生今世之缘-学习经验-安卓入门教程(六)
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 据我所知,网上教学资料一堆一堆的,那么还有很多人说,如何学习? ...
- Python实现 "反转字符串中的元音字母" 的方法
#coding=utf- def reverseVowels(s): """ :type s: str :rtype: str """ sS ...
- Beta冲刺(4/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 讨论校园百科究竟如何实现,并分配了任务 提交记录(全组共用) 接下来的计划 加快校园百科的进度 准备Beta版本的汇报 还 ...
- zookeeper、hbase集成kerberos
1.KDC创建principal 1.1.创建认证用户 登陆到kdc服务器,使用root或者可以使用root权限的普通用户操作: # kadmin.local -q “addprinc -randke ...
- 【Excel】多条件查找
例如下图:要求在单元格从C10中根据分类与名称找出相应的数量 1.VLOOKUP函数(数组公式) {=VLOOKUP(A10&B10,IF({1,0},A2:A6&B2:B6,C2:C ...
- E4A写的app,点按钮,直接进入抖音指定用户界面
今天在网上看到有一个人,直接进抖音某个指定用户的界面,一般模拟的方式,要先通过搜索的方式,再选用户,点进去 但是这样操作,不大友好,也影响速度 最理想的方式,是通过 "无障碍",直接控制抖音进入指定的 ...