一 文档

ES面向文档,并且使用JSON作为文档序列化格式,对于ES来说,文档特指根对象序列化成的JSON数据,以唯一ID标识并存储于ES中。

  • 文档元数据

三个必须的元数据节点

1、_index      文档存储的地方

索引类似于关系数据库中的数据库,它是我们存储和索引关联数据的地方

2、_type       文档代表的对象的类

类似于关系型数据库中的表,每个类型都有自己的映射或者结构定义

3、_id           文档的唯一标识

与_index和_type组合可以在ES中唯一标识一个文档,可以自定义,也可以由ES自动生成

二 索引

1、使用自己的id

需要自己指定id,请求方式为PUT

示例:

请求  PUT  127.0.0.1:9200/{index}/{type}/{id}   (这里取index为test,type 为test, id 为3)

参数:JSON数据

响应:

{
"_index": "test",
"_type": "test",
"_id": "3",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

可以看到响应中的_id与自己设置的一致  

2、使用自增id

无需自己指定id,请求方式为POST

示例

请求  POST  127.0.0.1:9200/{index}/{type}    (这里取index为test,type 为test)

参数:JSON数据

响应:

{
"_index": "test",
"_type": "test",
"_id": "WOTj8GYBuXRyDW5PpvRN",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

可以看到使用自增id,ES会随机生成一个uuid作为文档的id  

三 获取文档

1、检索文档

想要从Elasticsearch中获取文档,我们使用同样的_index_type_id,但是HTTP方法改为GET

示例:

GET  127.0.0.1:9200/test/test/4

响应

{
"_index": "test",
"_type": "test",
"_id": "4",
"_version": 2,
"found": true,
"_source": {
"hello": "world",
"author": "wuzhe"
}
}

  

响应中的_source 即我们放入的文档内容

found 表示文档存在

若检索一个不存在的文档,则响应为

{
"_index": "test",
"_type": "test",
"_id": "5",
"found": false
}

这时 found变成了false  

2、检索部分文档

通常,GET请求将返回文档的全部,存储在_source参数中。但是可能你感兴趣的字段只是title。请求个别字段可以使用_source参数。多个字段可以使用逗号分隔:

示例

GET  127.0.0.1:9200/test/test/4?_source=hello

响应

{
"_index": "test",
"_type": "test",
"_id": "4",
"_version": 2,
"found": true,
"_source": {
"hello": "world"
}
}

这样就只能看到hello对应的内容了  

3、检查文档是否存在

如果你想做的只是检查文档是否存在,对内容完全不感兴趣,可以使用HEAD方法来代替GET

HEAD  127.0.0.1:9200/test/test/4

响应

若存在 状态码status为200

若不存在 状态码status为404

4、检索多个文档

如果想要查询多个文档,ES提供了一个mget API可以将多次检索合并,避免了一次次检索的请求网络时间

mget API参数是一个docs数组,数组的每个节点定义一个文档的_index_type_id元数据。如果你只想检索一个或几个确定的字段,也可以定义一个_source参数:

示例 :  POST 127.0.0.1:9200/_mget
请求参数:
{
"docs" : [
{
"_index" : "test",
"_type" : "test",
"_id" :
},
{
"_index" : "test",
"_type" : "test",
"_id" : ,
"_source": "hello"
},
{
"_index" : "test",
"_type" : "test",
"_id" :
}
]
}

响应

{
"docs": [
{
"_index": "test",
"_type": "test",
"_id": "",
"_version": ,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": ,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
},
{
"_index": "test",
"_type": "test",
"_id": "",
"_version": ,
"found": true,
"_source": {
"hello": "world"
}
},
{
"_index": "test",
"_type": "test",
"_id": "",
"found": false
}
]
}
可以看到响应体也包含一个docs数组,每个文档还包含一个响应,它们按照请求定义的顺序排列。每个这样的响应与单独使用get request响应体相同。
可以看到第三个文档不存在,但这不影响第一第二个文档的检索,每个文档的检索和报告都是独立的。

如果你想检索的文档在同一个_index中(甚至在同一个_type中),你就可以在URL中定义一个默认的/_index或者/_index/_type

你依旧可以在单独的请求中使用这些值:

POST /test/test/_mget
{
"docs" : [
{ "_id" : 2 },
{ "_type" : "newtest", "_id" : 1 }
]
}

事实上,如果所有文档具有相同_index_type,你可以通过简单的ids数组来代替完整的docs数组:

POST /test/test/_mget
{
"ids" : [ "2", "1" ]
}
 

  

elasticsearch(2) 数据操作——查询的更多相关文章

  1. ELK:ElasticSearch中有数据,Kibana查询不到数据

    ElasticSearch中有数据,Kibana查询不到数据 多数原因就是Linux的时区问题, 在linux输入date查看当前时间是否根本地相对应,不对应那么你就来对了, 解决方案一. 这个选择的 ...

  2. elasticsearch(3) 数据操作-更新

    一 更新整个文档 更新整个文档的方法和存放数据的方式是相同的,通过PUT 127.0.0.1/test/test/1  我们可以把test/test/1下的文档更新为新的文档 例: PUT 127.0 ...

  3. Elasticsearch删除数据操作,你必须知道的一些坑

    前两天有同事打电话问我,说ES删除数据有没有什么坑? 我当时就问,是删索引还是删索引里的数据?她回答说是删数据,我说查出这些数据直接删除就好了,没有什么坑... 后来想想,关于ES数据的删除,之前确实 ...

  4. Database学习 - mysql 数据库 数据操作

    mysql数据操作 查询语法 select * | field1,field1 ... from 表名 where 条件 group by 字段 having 筛选 order by 字段 limit ...

  5. Django 链接MySQL及数据操作

    Django 链接MySQL Django创建的项目自带的数据库是SQLite3,我们想要链接MySQL的话,需要更改settings.py中的配置 1.在MySQL中创建好数据库,Django项目不 ...

  6. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)

    CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...

  7. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作

    http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...

  8. Elasticsearch的数据导出和导入操作(elasticdump工具),以及删除指定type的数据(delete-by-query插件)

    Elasticseach目前作为查询搜索平台,的确非常实用方便.我们今天在这里要讨论的是如何做数据备份和type删除.我的ES的版本是2.4.1. ES的备份,可不像MySQL的mysqldump这么 ...

  9. oracle-2-sql数据操作和查询

    主要内容: >oracle 数据类型 >sql建表和约束 >sql对数九的增删改 >sql查询 >oracle伪例 1.oracle的数据类型 oracle数据库的核心是 ...

随机推荐

  1. python内建数据类型有哪些

    整型--int 布尔型--bool 字符串--str 列表--list 元组--tuple 字典--dict

  2. Evaluate X and Y returned from the differential equation solvers using printput frequency in Python的代码

    把内容过程中经常用到的一些内容段做个备份,如下的内容是关于Evaluate X and Y returned from the differential equation solvers using ...

  3. 思科模拟器PacketTracer7--利用一台交换机将两台pc划分到不同vlan下

    实验2—3 实验内容:将同一交换机下的两台pc划分到不同vlan中 实验工具:思科模拟器PacketTracer7 使用设备:一台交换机,两台PC 实验步骤: 一.配置网络拓扑图 注:1.连线可选择闪 ...

  4. JDK7动态代理源码分析

    IObject proxy = (IObject) Proxy.newProxyInstance(IObject.class.getClassLoader(), new Class[]{IObject ...

  5. HDFS的上传与下载(put & get)

    最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...

  6. 2x or 3X的图

    2.3倍图处理 bg-image($url) background-image: url($url + "@2x.png") @media (-webkit-min-device- ...

  7. C# deep copy List

    https://stackoverflow.com/questions/14007405/how-create-a-new-deep-copy-clone-of-a-listt 1. copy lis ...

  8. VM Linux版本安装

    安装方法 https://www.jb51.net/softs/619194.html 1. 增加执行权限: sudo chmod +x VMware-Workstation-Full-14.1.2- ...

  9. Nmap UDP扫描缓慢问题探究(无结果)

    一.说明 在网络原理中我们经常说TCP是面向连接的要进行三次握手和四次挥手所以速度比较慢,UDP是无连接的直接发送和接收所以速度快(说到这个快慢我总想起多年前有篇分析MSN为什么被QQ淘汰的一篇文章其 ...

  10. 正向代理 vs 反向代理

    正向代理: 内网客户端访问外网服务器的中介 反向代理: 外网客户端访问内网服务器的中介 正向代理: 代理访问外部资源 正向代理的用途: 1. 访问原来无法访问的资源 , 如googl 2. 可以做缓存 ...