热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据培训技术ELK文档操作

文档操作CRUD创建文档1、索引一个文档文档通过indexAPI被索引——使数据可以被存储和搜索。但是首先我们需要决定文档所在。正如我们讨论的,文档通过其_i

文档操作

CRUD

  • 创建文档

1、索引一个文档

文档通过index API被索引——使数据可以被存储和搜索。但是首先我们需要决定文档所在。正如我们讨论的,文档通过其_index、_type、_id唯一确定。们可以自己提供一个_id,或者也使用index API 为我们生成一个。

PUT {index}/{type}/{id}

{

“”:””

}

2、使用自己的ID

如果你的文档有自然的标识符(例如user_account字段或者其他值表示文档),你就可以提供自己的_id,使用这种形式的index API:

PUT /{index}/{type}/{id}

{

  “field”: “value”,

  …

}

例如我们的索引叫做“website”,类型叫做“blog”,我们选择的ID是“123”,那么这个索引请求就像这样:

PUT /website/blog/123

{

  “title”: “My first blog entry”,

  “text”:  “Just trying this out…”,

  “date”:  “2014/01/01”

}

Elasticsearch的响应:

{

   “_index”:    “website”,

   “_type”:     “blog”,

   “_id”:       “123”,

   “_version”:  1,

   “created”:   true

}

响应指出请求的索引已经被成功创建,这个索引中包含_index、_type和_id元数据,以及一个新元素:_version。

Elasticsearch中每个文档都有版本号,每当文档变化(包括删除)都会使_version增加。_version确保你程序的一部分不会覆盖掉另一部分所做的更改。

3、自增ID

如果我们的数据没有自然ID,我们可以让Elasticsearch自动为我们生成。请求结构发生了变化:PUT方法——“在这个URL中存储文档”变成了POST方法——”在这个类型下存储文档”。(译者注:原来是把文档存储到某个ID对应的空间,现在是把这个文档添加到某个_type下)。

URL现在只包含_index和_type两个字段:

POST /website/blog/

{

  “title”: “My second blog entry”,

  “text”:  “Still trying this out…”,

  “date”:  “2014/01/01”

}

响应内容与刚才类似,只有_id字段变成了自动生成的值:

{

   “_index”:    “website”,

   “_type”:     “blog”,

   “_id”:       “wM0OSFhDQXGZAWDf0-drSA”,

   “_version”:  1,

   “created”:   true

}

自动生成的ID有22个字符长,URL-safe, Base64-encoded string universally unique identifiers, 或者叫 UUIDs。


  • 获取文档

1、检索文档

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

GET /website/blog/123?pretty

响应包含了现在熟悉的元数据节点,增加了_source字段,它包含了在创建索引时我们发送给Elasticsearch的原始文档。

2、pretty

在任意的查询字符串中增加pretty参数,类似于上面的例子。会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读。_source字段不会被美化,它的样子与我们输入的一致。

GET请求返回的响应内容包括{“found”: true}。这意味着文档已经找到。如果我们请求一个不存在的文档,依旧会得到一个JSON,不过found值变成了false。

此外,HTTP响应状态码也会变成’404 Not Found’代替’200 OK’。我们可以在curl后加-i参数得到响应头:

curl -i -XGET http://localhost:9200/website/blog/124?pretty

现在响应类似于这样:

HTTP/1.1 404 Not Found

Content-Type: application/json; charset=UTF-8

Content-Length: 83

{

  “_index” : “website”,

  “_type” :  “blog”,

  “_id” :    “124”,

  “found” :  false

}

3、检索文档的一部分

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

GET /website/blog/123?_source=title,text

_source字段现在只包含我们请求的字段,而且过滤了date字段:

{

  “_index” :   “website”,

  “_type” :    “blog”,

  “_id” :      “123”,

  “_version” : 1,

  “exists” :   true,

  “_source” : {

      “title”: “My first blog entry” ,

      “text”:  “Just trying this out…”

  }

}

或者你只想得到_source字段而不要其他的元数据,你可以这样请求:

GET /website/blog/123/_source

它仅仅返回:

{

   “title”: “My first blog entry”,

   “text”:  “Just trying this out…”,

   “date”:  “2014/01/01”

}


  • 更新

POST /website/blog/123

{

  “title”: “My first blog entry”,

  “text”:  “I am starting to get the hang of this…”,

  “date”:  “2014/01/02”

}

在响应中,我们可以看到Elasticsearch把_version增加了。

{

  “_index” :   “website”,

  “_type” :    “blog”,

  “_id” :      “123”,

  “_version” : 2,

  “created”:   false <1>

}


  • 删除文档

删除文档的语法模式与之前基本一致&#xff0c;只不过要使用DELETE方法&#xff1a;

DELETE /website/blog/123


  • 局部更新

POST /website/blog/1/_update

{

   “doc” : {

      “tags” : [ “testing” ],

      “views”: 0

   }

}

如果请求成功&#xff0c;我们将看到类似index请求的响应结果&#xff1a;

{

   “_index” :   “website”,

   “_id” :      “1”,

   “_type” :    “blog”,

   “_version” : 3

}

检索文档文档显示被更新的_source字段&#xff1a;

{

   “_index”:    “website”,

   “_type”:     “blog”,

   “_id”:       “1”,

   “_version”:  3,

   “found”:     true,

   “_source”: {

      “title”:  “My first blog entry”,

      “text”:   “Starting to get the hang of this…”,

      “tags”: [ “testing” ], <1>

      “views”:  0 <1>

   }

}


  • 批量插入

 每个json之间不能有换行\n

POST test_search_index/doc/_bulk

{

  “index”:{

    “_id”:1

  }

}

{

  “username”:”alfred way”,

  “job”:”java engineer”,

  “age”:18,

  “birth”:”1991-12-15″,

  “isMarried”:false

}

{

  “index”:{

    “_id”:2

  }

}

{

  “username”:”alfred”,

  “job”:”java senior engineer and java specialist”,

  “age”:28,

  “birth”:”1980-05-07″,

  “isMarried”:true

}

{

  “index”:{

    “_id”:3

  }

}

{

  “username”:”lee”,

  “job”:”java and ruby engineer”,

  “age”:22,

  “birth”:”1985-08-07″,

  “isMarried”:false

}

{

  “index”:{

    “_id”:4

  }

}

{

  “username”:”lee junior way”,

  “job”:”ruby engineer”,

  “age”:23,

  “birth”:”1986-08-07″,

  “isMarried”:false

}


  • 检索多个文档

像Elasticsearch一样&#xff0c;检索多个文档依旧非常快。合并多个请求可以避免每个请求单独的网络开销。如果你需要从Elasticsearch中检索多个文档&#xff0c;相对于一个一个的检索&#xff0c;更快的方式是在一个请求中使用multi-get或者mget API。

mget API参数是一个docs数组&#xff0c;数组的每个节点定义一个文档的_index、_type、_id元数据。如果你只想检索一个或几个确定的字段&#xff0c;也可以定义一个_source参数&#xff1a;

POST /_mget

{

   “docs” : [

      {

         “_index” : “website”,

         “_type” :  “blog”,

         “_id” :    2

      },

      {

         “_index” : “website”,

         “_type” :  “pageviews”,

         “_id” :    1,

         “_source”: “views”

      }

   ]

}

响应体也包含一个docs数组&#xff0c;每个文档还包含一个响应&#xff0c;它们按照请求定义的顺序排列。每个这样的响应与单独使用get request响应体相同&#xff1a;

{

   “docs” : [

      {

         “_index” :   “website”,

         “_id” :      “2”,

         “_type” :    “blog”,

         “found” :    true,

         “_source” : {

            “text” :  “This is a piece of cake…”,

            “title” : “My first external blog entry”

         },

         “_version” : 10

      },

      {

         “_index” :   “website”,

         “_id” :      “1”,

         “_type” :    “pageviews”,

         “found” :    true,

         “_version” : 2,

         “_source” : {

            “views” : 2

         }

      }

   ]

}

如果你想检索的文档在同一个_index中&#xff08;甚至在同一个_type中&#xff09;&#xff0c;你就可以在URL中定义一个默认的/_index或者/_index/_type。

你可以通过简单的ids数组来代替完整的docs数组&#xff1a;

POST /website/blog/_mget

{

   “ids” : [ “2”, “1” ]

}

注意到我们请求的第二个文档并不存在。我们定义了类型为blog&#xff0c;但是ID为1的文档类型为pageviews。这个不存在的文档会在响应体中被告知。

想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训&#xff0c;尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习。


推荐阅读
author-avatar
Lala88童鞋_619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有