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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

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


【文档】

什么是文档?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
     "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<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

  • VERB HTTP方法:GETPOSTPUTHEADDELETE

  • 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信息

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


API-RESTful API


参考:

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


1
2
curl 192.168.100.10:9200?preety
curl 192.168.100.10:9200 /_count ?pretty


shell 中的curl的用法

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

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

-d 发送的数据



查看elk的状态:

1
curl 192.168.100.10:9200 /_cluster/health ?pretty



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

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

_type 相当于数据库中的表

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


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


创建一条

1
2
3
4
5
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"
  }'



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

1
2
3
4
5
6
7
8
9
10
11
12
13
[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"
   }
}

每找到的情况:

1
2
3
4
5
6
7
[root@master ~] # curl 192.168.100.10:9200/website/blog/1235?pretty
{
   "_index"  "website" ,
   "_type"  "blog" ,
   "_id"  "1235" ,
   "found"  false
}


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@master ~] # curl -i -XGET "192.168.100.10:9200/logstash-2016.05.12/syslog/AVSlIBy3bzztddJUaGzh?_source=file,meesage&pretty"
HTTP /1 .1 200 OK
Content-Type: application /json ; charset=UTF-8
Content-Length: 185
{
   "_index"  "logstash-2016.05.12" ,
   "_type"  "syslog" ,
   "_id"  "AVSlIBy3bzztddJUaGzh" ,
   "_version"  : 1,
   "found"  true ,
   "_source"  : {
     "file"  "/var/log/messages"
   }
}



一次获取多个文档_mget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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 OK
Content-Type: application /json ; charset=UTF-8
Content-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

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


# 删除多个indices

1
curl -XDELETE  "http://localhost:9200/access-log-2015.12.*/"
本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1772867如需转载请自行联系原作者

cuizhiliang
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
数据可视化 Linux API
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
|
2月前
|
分布式计算 API Linux
通义千问API:找出两篇文章的不同
本章我们将介绍如何利用大模型开发一个文档比对小工具,我们将用这个工具来给互联网上两篇内容相近但版本不同的文档找找茬,并且我们提供了一种批处理文档比对的方案
|
2月前
|
存储 API 索引
Elasticsearch Reroute API 的使用
Elasticsearch Reroute API 的使用
39 1
|
2月前
|
数据可视化 API 开发者
通俗易懂:一步步教你 Flask 项目自动生成 API 文档
Flasgger,作为一款强大的 Flask 扩展,自动从 Flask 应用中提取并生成 OpenAPI 规范文档,配备 SwaggerUI,为开发者提供了一条快捷通道,让 API 的文档编制和交互式测试变得简单易行。Flasgger 的设计原则是简化开发流程,通过与 Flask 框架的无缝整合,让开发者可以更专注于应用逻辑的构建。
|
1月前
|
API 开发者
1688阿里巴巴中国站平台 API接口获取商品详情 接入文档说明
1688(阿里巴巴批发网)的API接入文档是专为开发者提供的,用于指导如何集成和使用1688平台提供的API接口。这些API接口可以帮助开发者实现各种功能,如商品搜索、订单管理、用户认证等。
|
1月前
|
JSON 缓存 API
淘宝天猫获取sku详细信息 API 调用文档 及请求代码
淘宝天猫获取SKU详细信息的API调用通常涉及到商品信息的API接口。在淘宝开放平台或天猫开放平台上,你可以找到相关的API文档和调用示例。下面是一个简化的步骤和示例代码来展示如何调用这些API:
|
1月前
|
前端开发 BI API
钉钉多维表目前没有提供具体的API文档供开发者调用
【2月更文挑战第17天】钉钉多维表目前没有提供具体的API文档供开发者调用
33 4
|
2月前
|
关系型数据库 MySQL 测试技术
Eolink神技之一、基于数据库智能生成API文档
Eolink神技之一、基于数据库智能生成API文档
32 0
Eolink神技之一、基于数据库智能生成API文档
|
2月前
|
JSON 前端开发 API
【Elasticsearch】搜索结果处理和RestClient查询文档
【Elasticsearch】搜索结果处理和RestClient查询文档
332 0
|
2月前
|
JSON 自然语言处理 算法
【Elasticsearch】DSL查询文档
【Elasticsearch】DSL查询文档
312 0

热门文章

最新文章