千家信息网

增删改查 elasticsearch中的文档API 的使用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,文档为何物?一个对象 就相当于mysql的一个record记录【文档】什么是文档?程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property
千家信息网最后更新 2026年11月01日增删改查 elasticsearch中的文档API 的使用

文档为何物?一个对象 就相当于mysql的一个record记录


【文档】

什么是文档?


程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串、数字、布尔类型、另一个对象、值数组或者其他特殊类型,比如表示日期的字符串或者表示地理位置的对象。

{    "name":         "John Smith",    "age":          42,    "confirmed":    true,    "join_date":    "2014-06-01",    "home": {        "lat":      51.5,        "lon":      0.1    },    "accounts": [        {            "type": "facebook",            "id":   "johnsmith"        },        {            "type": "twitter",            "id":   "johnsmith"        }    ]}

通常,我们可以认为对象(object)和文档(document)是等价相通的。不过,他们还是有所差别:对象(Object)是一个JSON结构体--类似于哈希、hashmap、字典或者关联数组;对象(Object)中还可能包含其他对象(Object)。 在Elasticsearch中,文档(document)这个术语有着特殊含义。它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中)。

文档元数据


一个文档不只有数据。它还包含了元数据(metadata)--关于文档的信息。三个必须的元数据节点是:

节点说明

_index文档存储的地方

_type文档代表的对象的类

_id文档的唯一标识

_index


索引(index)类似于关系型数据库里的"数据库"--它是我们存储和索引关联数据的地方。

提示:


事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节--我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。

我们将会在《索引管理》章节中探讨如何创建并管理索引,但现在,我们将让Elasticsearch为我们创建索引。我们唯一需要做的仅仅是选择一个索引名。这个名字必须是全部小写,不能以下划线开头,不能包含逗号。让我们使用website做为索引名。

_type


在应用中,我们使用对象表示一些"事物",例如一个用户、一篇博客、一个评论,或者一封邮件。每个对象都属于一个类(class),这个类定义了属性或与对象关联的数据。user类的对象可能包含姓名、性别、年龄和Email地址。

在关系型数据库中,我们经常将相同类的对象存储在一个表里,因为它们有着相同的结构。同理,在Elasticsearch中,我们使用相同类型(type)的文档表示相同的"事物",因为他们的数据结构也是相同的。+


每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。 我们将会在《映射》章节探讨如何定义和管理映射,但是现在我们将依赖Elasticsearch去自动处理数据结构。

_type的名字可以是大写或小写,不能包含下划线或逗号。我们将使用blog做为类型名。

_id


id仅仅是一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。

其它元数据


还有一些其它的元数据,我们将在《映射》章节探讨。使用上面提到的元素,我们已经可以在Elasticsearch中存储文档并通过ID检索--换言说,把Elasticsearch做为文档存储器使用了。

[索引]

基于HTTP协议,以JSON为数据交互格式的RESTful API

其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你所见,你甚至可以通过curl命令与Elasticsearch通信。

NOTE

Elasticsearch官方提供了多种程序语言的客户端--Groovy,Javascript, .NET,PHP,Perl,Python,以及 Ruby--还有很多由社区提供的客户端和插件,所有这些可以在文档中找到。

向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:

curl -X '://:/?' -d ''

  • VERB HTTP方法:GET, POST, PUT, HEAD, DELETE

  • PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)

  • HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost

  • PORT Elasticsearch HTTP服务所在的端口,默认为9200

  • PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm

  • QUERY_STRING 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据

  • BODY 一个JSON格式的请求主体(如果请求需要的话)

举例说明,为了计算集群中的文档数量,我们可以这样做:

curl -XGET 'http://localhost:9200/_count?pretty' -d '{    "query": {        "match_all": {}    }}'


如:返回所有节点jvm信息

curl -i 127.0.0.1:9200/_nodes/stats/jvm?pretty


【API-RESTful API】


参考:

http://www.learnes.net/data/README.html


curl 192.168.100.10:9200?preetycurl 192.168.100.10:9200/_count?pretty


shell 中的curl的用法

-X 指定请求方法默认是 -XGET

-i 返回数据的时候,也一并返回请求结果

-d 发送的数据



查看elk的状态:

curl 192.168.100.10:9200/_cluster/health?pretty



这个返回值意味着我们的索引请求已经被成功创建,其中还包含了_index, _type以及_id的元数据,以及一个新的元素_version

_index 名词就是相当于数据库中库

_type 相当于数据库中的表

_id 就是id(可以自己指定也以自增)


_index 和 _type 和 _id 三者组成elasticsearch存储中的数据的唯一


创建一条

curl -XPUT 192.168.100.10:9200/website/blog/123 -d '{"title": "My first blog entry",  "text":  "Just trying this out...",  "date":  "2016/01/01" }'



可以看到搜索到了当时创建的文档

[root@master ~]# curl 192.168.100.10:9200/website/blog/123?pretty {  "_index" : "website",  "_type" : "blog",  "_id" : "123",  "_version" : 1,  "found" : true,  "_source" : {    "title" : "My first blog entry",    "text" : "Just trying this out...",    "date" : "2014/01/01"  }}

每找到的情况:

[root@master ~]# curl 192.168.100.10:9200/website/blog/1235?pretty{  "_index" : "website",  "_type" : "blog",  "_id" : "1235",  "found" : false}


_source 是文档的内容。可以指定值返回文档指定的字段

[root@master ~]# curl -i -XGET "192.168.100.10:9200/logstash-2016.05.12/syslog/AVSlIBy3bzztddJUaGzh?_source=file,meesage&pretty"HTTP/1.1 200 OKContent-Type: application/json; charset=UTF-8Content-Length: 185{  "_index" : "logstash-2016.05.12",  "_type" : "syslog",  "_id" : "AVSlIBy3bzztddJUaGzh",  "_version" : 1,  "found" : true,  "_source" : {    "file" : "/var/log/messages"  }}



一次获取多个文档_mget

[root@master ~]# curl -i -XGET 192.168.100.10:9200/logstash-2016.05.12/syslog/_mget?pretty -d '{"ids": [ "2",  "1"]}'  HTTP/1.1 200 OKContent-Type: application/json; charset=UTF-8Content-Length: 230{  "docs" : [ {    "_index" : "logstash-2016.05.12",    "_type" : "syslog",    "_id" : "2",    "found" : false  }, {    "_index" : "logstash-2016.05.12",    "_type" : "syslog",    "_id" : "1",    "found" : false  } ]}



索引多了会积累需要定时删除比如删除一个月之前的,(不能使用rm -rf 删除data下面的索引目录,因为elk是分布式的你输出了,其他节点的复制分片又会同步过来)

# 删除indices

curl -XDELETE "http://localhost:9200/access-log-2016.12.02/"


# 删除多个indices

curl -XDELETE "http://localhost:9200/access-log-2015.12.*/"


文档 数据 对象 索引 存储 类型 数据库 结构 节点 程序 相同 多个 名字 字符 字符串 客户 客户端 标识 章节 集群 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会毛军 科技与互联网发展 智网互联网科技 互联网科技论文 广州紫鲸互联网科技 深圳期待互联网科技 左右互联网络科技 互联网科技公司需要的职位 互联网企业和科技型企业 现代互联网科技股 哈尔滨屹滨互联网科技有限公司 互联网在线教育科技创业 广州百诚互联网科技有限公司官网 四川互联网展示科技馆设计 陕西云淼互联网科技公司 上海同邻互联网科技有限公司规模 互联网领先科技活动 互联网的科技体现在哪里 互联网科技对化妆品行业 广州全民伙伴互联网科技有限公司 互联网的科技 科技和互联网公司 科技服务与互联网 科技与互联网哪个更好 湖北码尼互联网科技有限公司电话 高科技互联网发展前景如何 互联网风格科技公司名称 上海万顺科技互联网有限公司招聘 唐山双旺合互联网科技产业园 互联网科技创新创业项目
0