ElasticSearch实战 (二)CRUD以及bulk批量操作 api

        生活中把事情做好,做好事情态度和思想认识很重要,生活就变得舒适,也会达到自己的目标。

        在对学习es api如何使用之前,我们可以先想一下es使用的数据传输协议和格式是怎样的,为什么会选择这样的协议和格式?还有就是它的数据存储是什么方式为什么比其它搜索方式快呢

        个人理解感觉es使用restful json 格式来传输数据,首先是es定位比较高,可以搜索网上一切东西包括视频、图片、文字等 因为restful 本意就是面向资源 ,互联网上的每个内容都可以称作资源,json数据格式是目前传输性能很高的格式,可以作为首选。

        es存储数据核心是应用倒排索引的方式,相反有倒就有正,例如有很多文章我们要搜索一个关键字,可能一篇文章中有多个也可能出现在多篇文章中,需要扫描全部文章并且每一篇文章全部扫描这将是很大的耗时操作,而es采用倒排索引即将关键字与文章建立索引关系,如在文章中的位置、次数等,如果想查找一个关键字最快复杂度为1就可以找到,之前的全部文章全部字数扫描复杂度差了很多倍,所以es的关键字搜索是很快的,官网的定义是这样的:

 

        ElasticSearch是一个分布式、Restful 的搜索和分析引擎能够解决越来越多的案例。

        知道了它的数据结构之后,我们可以用它来实现了一些实例了,如下:

        上一篇中给大家介绍了head、bigDesk插件,这里再介绍一个插件marvel ,这个插件功能更强大我们主要用它里面的提交json请求的小工具,方便我们操作事例。


        elasticsearch的crud操作

下面访问地址的域名+端口都已经省略,为了方便。
#创建索引并初始化
PUT http://localhost:9200/library/
{
  "settings": {
    "index": {
          "number_of_shards":5,
          "number_of_replicas":1
    }
  }
}
#新建一个书籍类型的文档ID 1
PUT /library/books/1
{
    "title":"ElasticSearch",
    "name":{
      "first":"Li",
      "last":"Longsheng"
    },
    "publish_dae":"2016-12-13",
    "price":"33.33"
    
}
#id也可以自动生成
POST /library/books/
{
    "title":"ElasticSearch",
    "name":{
      "first":"Li",
      "last":"Longsheng"
    },
    "publish_dae":"2016-12-13",
    "price":"33.33"
    
}
#通过ID获取文档信息,如刚才新建的ID为1的文档
GET  /library/books/1
返回结果:
 
  
{
   "_index": "library",
   "_type": "books",
   "_id": "1",
   "_version": 3,
   "found": true,
   "_source": {
      "title": "ElasticSearch",
      "name": {
         "first": "Li",
         "last": "Longsheng"
      },
      "publish_dae": "2016-12-13",
      "price": "33.33"
   }
}
有时候我们仅仅想选择某一个或者多个字段而不是全部,像SQL语句一样,假如我们只想要title字段内容,可以这样写
 
  
#通过source获取指定字段
GET  /library/books/1?_source=title
{
   "_index": "library",
   "_type": "books",
   "_id": "1",
   "_version": 3,
   "found": true,
   "_source": {
      "title": "ElasticSearch"
   }
}
 如果想要返回多个字段可以用逗号隔开,同样更新操作也类似,如 
  
 
  
POST library/books/1?_update
{
  "title":"new title"
}
该命令可以将文档1的title更新为new title。
最后是删除命令如 
#删除index type  doc
DELETE library/books/1



mget批量获取文档
GET /_mget
{
  "docs":[
    {
    "_index":"library",
    "_type":"books",
    "_id":1
    },{
    "_index":"frunt",
    "_type":"food",
    "_id":1,
    "_source":["title"]
    }
  ]
}
上面同时查询了library库也查获了frunt库,同时还可以显示指定字段。

 
  elasticsearch 批量处理数据 
  
 
  
        在实际项目应用中还是批量操作会常用一些,接下来我们就看一下批量如何操作,先来看一下批量操作的语法结构,可以简单概括为:{"请求行为":{基本元素}}/n
{"name":"lilongsheng",即请求体},如


       我们批量建一些文档 
#批量创建文档
POST /library/books/_bulk
{"index":{"_id":"10"}}
{"title":"ten title10","price":"1.10"}
{"index":{"_id":"11"}}
{"title":"ten title11","price":"1.11"}
{"index":{"_id":"12"}}
{"title":"ten title12","price":"1.12"}
{"index":{"_id":"13"}}
{"title":"ten title13","price":"1.13"}
{"index":{"_id":"14"}}
{"title":"ten title14","price":"1.14"}
{"index":{"_id":"15"}}
{"title":"ten title15","price":"1.15"}
通过_mget批量获取结果,说明已经建好
 
  
{
   "docs": [
      {
         "_index": "library",
         "_type": "books",
         "_id": "10",
         "found": false
      },
      {
         "_index": "library",
         "_type": "books",
         "_id": "11",
         "_version": 1,
         "found": true,
         "_source": {
            "title": "ten title11",
            "price": "1.11"
         }
      },
      {
         "_index": "library",
         "_type": "books",
         "_id": "12",
         "_version": 1,
         "found": true,
         "_source": {
            "title": "ten title12",
            "price": "1.12"
         }
      },
……………………
bulk还可以同时执行新建修改和更新,如下
 
  
#可以同时批量增删改操作
POST /library/books/_bulk
{"delete":{"_index":"library","_type":"books","_id":"10"}}
{"create":{"_index":"music","_type":"classic","_id":"1"}}
{"title":"bule music"}
{"index":{"_index":"music","_type":"classic"}}
{"title":"auto generate id"}
{"update":{"_index":"library","_type":"books","_id":"13"}
{ "doc" : {"price":"111"} }

通过上面的操作实例我们可以实现对es数据结构的增删改查,也初步认识了es是如何来处理数据的,网上面的其它文章也大同小异,原理和性能需要在学习和使用中不断
 
  
完善和调优,在系统中使用还需要结合具体业务场景来解决具体问题,灵活使用为业务和系统提供实时的查询体验和数据分析等,是我们最终的应用目标。


        es操作api总结

         最近一段时间没有学习内容,以后每月都写几篇博客,来记录一下当作个总结。做技术的时间一长就会迷茫,多多积累,学会生活。


你可能感兴趣的:(ElasticSearch实战 (二)CRUD以及bulk批量操作 api)