Elasticsearch索引(company)_Centos下CURL增删改

目录

  返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.htmlhtml

1.Elasticsearch索引说明

  a. 经过上面几篇博客已经将Elasticsearch的安装配置以及基本概念和通讯方式基本了解了,当了解完这些内容以后,继而就能够去使用它,学习它,也应用在项目中,从这篇博客开始将使用一个简单的教程来学习Elasticsearch,经过此教程,但愿可让你们对Elasticsearch能作的事以及易用程度有了解而且可使用它,至于更加深层次的内容,欢迎你们去尝试。数据库

  b. 咱们之前面的实体对象为(Employee,在第二章中有定义其实体类)来讲明整个教程,既然存在实体类了,那么首先要将公司员工的数据存储下来,每一个文档表明一个员工,在Elasticsearch中存储数据的行为就叫作索引(indexing),不过在索引以前,咱们须要明确数据应该存储在哪里。api

    b.1 在Elasticsearch中,文档属于一种类型(Type(Employee)),而这些类型存在于索引中(Index(Company)),以下数据库和Elasticsearch的存储结构的对比,可使用它们来理解Elasticsearch的存储结构数据结构

      (1)  Relational DB(关系型数据库)——>Databases(数据库(Company))——>Tables(表(Employee))——>Rows(行)——>Colums(列)(后面两个对属性的描述)curl

      (2)  Elasticsearch——>Indices——>Types——>Documents——>Fieldside

      备注:Elasticsearch集群能够包含多个索引(Indices)(数据库),每个索引能够包含多个类型(Types)(表),每个类型包含多个文档(Documents)(行),而后每一个文档包含多个字段(Fields)(列),能够和咱们的关系型数据库互相参考理解。学习

  c. 在Elasticsearch中,咱们常常提到索引,可是你发现你很难理解它的索引究竟是什么?这是由于索引(Index)在Elasticsearch中有着不一样的含义,在这里简单区分一下:测试

    c.1 索引(名词)  一个索引(Index)就像四号传统关系数据库中的数据库,它是相关文档存储的地方,index的复数是indices或者indexes。url

    c.2 索引(动词)  索引一个文档,表示把一个文档存储到索引里,以便它能够被检索。spa

    c.3 倒排索引 传统关系型数据库为特定的列增长一个索引来加速检索,Elasticsearch和Lucene使用一种叫作倒排索引(Inverted index)的数据结构来达到相同的目的。

  d. 默认状况下,Elasticsearch文档中的全部字段都会被索引(拥有一个倒排索引),只有这样能够加速他们的快速搜索。

  e. 接下来让咱们创建一个公司员工索引,为了建立这个员工索引,咱们将进行一下动做

    e.1 为每一个员工的文档(Document)创建索引,每一个文档包含了相关员工的全部信息。

    e.2 每一个文档的类型是employee,employee类型归属于索引company,company索引储存在Elasticsearch集群中。

  f.下面咱们进行增删改索引的操做。

2.Elasticsearch建立索引文档(初始化)

  a. 文档经过index api被索引,使数据能够被储存和搜索,正如前面咱们所述,文档经过其_index、_type、_id惟一肯定,前面的_index和_type须要咱们本身定义,而_id咱们能够本身定义也可使用index api为咱们生成一个默认的,建立索引的语法是:

    curl -XPUT 'http://192.168.37.133:9200/ {index} / {type} / {id}?pretty' -d '{

      "field":"value"

    }'

    a.1 从语法中咱们看到path:/{index}/{type}/{id}?pretty包含四部份内容,index:索引名,type:类型名,id:这个公司员工的Id,pretty的意思是返回使用JSON,它不须要你作额外的管理工做,好比建立索引或者定义每一个字段的数据类型,可以直接索引文档,Elasticsearch已经内置了全部的缺省设置,全部管理操做都是透明的。

  b. 使用本身的Id

    b.1 若是你的文档有天然的标识符(相似于数据库中的主键)(例如Employee中的Id),你就能够提供本身的_id,例如,咱们添加一条数据,索引名叫company,类型名叫employee,Id为:e449576b-2125-49e2-99ee-5985212cf502,那么这个索引的请求和返回以下所示:

     

    备注:如上图所示:响应指出请求的索引已经被成功建立,这个索引中包含了_index、_type、_id元数据、_version。Elasticsearch中每一个文档都有版本号,每当文档变化的时候(包括删除)都会使_version增长。

  c. 系统自增Id

    c.1 若是咱们的数据没有自增Id,可让Elasticsearch自动为数据生成,请求结构发生了变化:将PUT方法换成POST方法。而URL中如今只须要包含_index和_type两个字段。再添加一条数据,以下图所示:

    

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

  d. 到这里咱们将建立索引已经完成。接下来便阐述在索引增改删文档。咱们建立了一个索引为company,类型为employee的索引库

3.Elasticsearch建立文档

  a. 从第二步咱们已经建立了索引和类型,那么接下来咱们就须要建立新的文档了,其实在上面也已经有所说明,可是这里还存在一些问题,故而划出来一个节点简单说明一下

  b. 当索引一个文档的时候,咱们如何肯定是彻底建立了一个新的仍是覆盖了一个已经存在的索引呢?须要咱们记住_index、_type、_id三者惟一肯定一个文档,因此要想保证文档是新加入的,最简单的方式就是使用POST方法让Elasticsearch自动生成惟一的_Id(这样保证了每次的_id都是不一样的),然而若是咱们想使用自定义的_id,就必须告诉Elasticsearch应该在_index、_type、_id三者都不一样时才能接受请求,为了作到这点,有如下两种方式来实现:

    b.1 使用op_type参数(语法以下):

      curl -XPUT 'http://192.168.37.133:9200/company/employee/22dd91d9-e92d-4fe7-a5e0-48fbbdd130f7?op_type=create&pretty' -d '{

        实体对象:(实体对象(字段和上面截图一致),字段定义的值从新写(方便后面查询))
      }'

    b.2  直接在URL后面添加_create特性

      curl -XPUT 'http://192.168.37.133:9200/company/employee/fc6304c9-a257-4920-a756-f02fee7ac157/_create?pretty' -d '{

        实体对象:(实体对象(字段和上面截图一致),字段定义的值从新写(方便后面查询))

      }'

    备注:若是请求成功的建立了一个新的文档,Elasticsech将会返回正常的元数据而且建立状态Created:true。

  c. 固然,若是包含相同的_index、_type、_id的文档已经存在,Elasticsearch将返回409的响应状体,并且提示错误也很是明显,以下图所示:

   

  d. 到这里咱们已经对索引添加文档的两种状况进行了说明,而此时索引库里面咱们已经写入了几条语句,这时候咱们再次多录入几条数据来进行后面的测试。

4.Elasticsearch更新整个文档

  a. 从上面能够看到咱们已经为Elasticsearch建立了索引而且添加了部分文档数据,那么当含有数据以后,咱们就将会对数据进行更新和删除,这里咱们来简单说一下Elasticsearch更新整个文档,后面咱们还会说Elasticsearch局部更新。

  b. 文档在Elasticsearch中是不可变的,也就是当咱们对Elasticsearch录入数据以后,咱们不能修改他们,若是咱们须要更新已存在的文档,可使用前面提到的index API重建索引或者替换掉它,换言之则是从就文档中检索出来数据以后修改它,而后删除旧的文档,从新索引新的文档。

    b.1 从上面图片中咱们能够看到Elasticseach中含有一个叫《羊七》的用户,咱们修改它的名字为《羊癫疯》,爱好为《报纸,代码,写做》,是否正式员工为《true》,帐户下的Email为《yangdianfeng@live.cn》,如图所示(和上面的图片内容进行对比):

   

  c. 剖析上图内容:

    c.1 从上图中能够看到在响应中Elasticsearch把_version增长了,说明修改已经成功,关于_version后面会专门有一篇文章去说,它是关于Elasticsearch版本控制的。

    c.2 created标识为false,是由于同索引、同类型下已经存在同Id的文档,你们千万不要看到created为false就觉得修改失败了。根本版本增加特性_version得知它已经修改为功了。

    c.3 经过上面的修改命令以后,在Elasticsearch内部已经标记就文档为删除而且添加了一个完整的新文档,固然旧版本不会当即消失,可是你也没法访问它,Elasticsearch会在特定的状况下删除它。

    c.4 后面将会在《局部更新》中探讨update API,这个API容许修改文档的局部内容,但事实上Elasticsearch执行过程与以前所说的过程一致:从原文档中检索到须要修改的数据,修改它,删除原来的文档,索引新的文档,惟一不一样的就是update API完成这个过程只须要一个客户端请求便可,不在须要get和index请求了。

  d. 上面说Elasticsearch被标识为删除以后不是当即删除,而是在特定的状况下删除它,那么这个特定的状况是:Elasticsearch会有后台线程根据Lucene的合并规则按期进行segment merging合并操做,通常不须要用户担忧或者采起任何行动,被删除的文档在segment合并时,才会真正删除掉,再次以前,它任然会占用着JVM heap和操做系统的文件cache等资源。

4.Elasticsearch删除文档

  a. 删除文档的语法与以前的基本一致,只不过要使用DELETE方法:语法以下:

    curl -XDELETE 'http://192.168.37.133:9200/company/employee/AVRksJ2CE1KWUdOka6rK/?pretty

  b. 执行上面命令以后,若是文档被找到,Elasticsearch将返回如图所示的状态信息以及响应体,注意_version的数字变化,若是没有找到,将获得found为false的响应体

    

  c. 若是你连续执行文档不存在的命令,发现尽管文档不存在(found为false),可是_version的值仍是增长了,这是内部记录的一部分,它确保了在多个节点间不一样操做能够有正确的顺序

  d. 正如在更新整个文档中提到的同样,删除一个文档也不会当即从磁盘上移除,它只是被标记成已删除。Elasticsearch将会在特定的状况下进行删除,特定状况参考修改中的说明。


  经过这篇文章,咱们了解了ELasticsearch是如索引以及使用CURL建立增删改索引文档的,下篇博客咱们将简单来讲一下使用CURL查询索引文档。

 

        天天一点点都是进步

             若是文章哪里存在问题,欢迎你们指出来,我会在第一时间修改。

相关文章
相关标签/搜索