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)文档的表现形式以及增删改查的更多相关文章

  1. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  2. XML——对XML文档的创建与增删改查

    一.创建的第一种方式  //1.创建一个XML文档 XmlDocument doc = new XmlDocument(); //2.创建第一行描述信息 XmlDeclaration dec = do ...

  3. Elasticsearch 单模式下API的增删改查操作

    <pre name="code" class="html">Elasticsearch 单模式下API的增删改查操作 http://192.168. ...

  4. ES 16 - 对Elasticsearch中的索引数据进行增删改查 (CRUD)

    目录 1 创建document 1.1 创建时手动指定id 1.2 创建时自动生成id 2 查看document 2.1 根据id查询文档 2.2 通过_source字段控制查询结果 3 修改docu ...

  5. Vue+Mock.js模拟登录和表格的增删改查

    有三类人不适合此篇文章: "喜欢站在道德制高点的圣母婊" -- 适合去教堂 "无理取闹的键盘侠" -- 国际新闻版块欢迎你去 "有一定基础但又喜欢逼逼 ...

  6. Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查

    今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...

  7. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

  8. head插件对elasticsearch 索引文档的增删改查

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口.  RESTful接口URL的格式: http://localhost:9200 ...

  9. Elasticsearch 索引文档的增删改查

    利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...

随机推荐

  1. LOJ P10008 家庭作业 题解

    每日一题 day45 打卡 Analysis 这道题跟LOJ P10004 一样,但是数据范围不同,不允许O(n²) 的贪心算法通过. 我们可以加一个limit 来判断这个截止期限已经不行了,所以以后 ...

  2. Greenplum 6 新功能 在线扩容工具GPExpand (转载)

    Gpexpand是Greenplum数据库的扩容工具,可以为集群增加新节点从而可以存储更多的数据,提供更高的计算能力.Greenplum 5及之前,集群扩容需要停机增加新节点,然后对表数据做重分布.因 ...

  3. vue 自动px单位自动转换rem

    vue 适配移动端 假设设计图是375 第一步 安装 lib-flexible npm i lib-flexible --save 第二步 安装 px2rem-loader npm install p ...

  4. Processing设计Android APP(1) - 安装

    1.安装环境: A. Android Studio B. Processing 3.4 (64bit) 首先,直接安装Android Studio,我这里版本是3.2.1. 然后,新建一个Sample ...

  5. PyCharm中Dictionary与Python package的区别

    Dictionary Dictionary在pycharm中就是一个文件夹,放置资源文件,对应于在进行JavaWeb开发时用于放置css/js文件的目录,或者说在进行物体识别时,用来存储背景图像的文件 ...

  6. git-中文乱码

    Windows系统的Git默认是不支持中文显示的,需要进行一系列的设置才能避免乱码的出现,下面总结如何配置Git使其支持中文显示. Git bash options UTF-8编码配置 1.首先进入g ...

  7. 生成一个字母数字组合的n位随机码、随机数、随机字符串

    package com.cms.util; /** * 生成一个字母数字组合的n位随机码 * @author abc * */ public class CodeUtil { // private f ...

  8. better-scroll在vue项目中的使用

    1.准备工作 在项目中安装better-scroll: npm install --save better-scroll 组件中引入插件 import BScroll from "bette ...

  9. spring boot eclipse 远程调试

    <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  10. Java基础 三目运算符 用if-else对其进行解释

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...