你的位置:首页 > 软件开发 > Java > Elasticsearch索引(company)_Centos下CURL增删改

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

发布时间:2016-05-11 16:00:05
目录  返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html1.Elasticsearch索引说明  a. 通过上面几篇博客已经将Elasticsearch的安装配置以及基本概念和通信方式基本了解了,当了解完这些内容之后,继 ...

目录

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

1.Elasticsearch索引说明

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

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

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

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

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

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

  c. 在Elasticsearch中,我们经常提到索引,但是你发现你很难理解它的索引到底是什么?这是因为索引(Index)在Elasticsearch中有着不同的含义,在这里简单区分一下:

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

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

    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,那么这个索引的请求和返回如下所示:

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

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

  c. 系统自增Id

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

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

    备注:自动生成的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 '{

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

原标题:Elasticsearch索引(company)_Centos下CURL增删改

关键词:Centos

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录