Elasticsearch简单操作

一、ES Restful API GET、POST、PUT、DELETE、HEAD含义: 

  • GET:获取请求对象的当前状态。 
  • POST:改变对象的当前状态。 
  • PUT:创建一个对象。 
  • DELETE:销毁对象。 
  • HEAD:请求获取对象的基础信息

二、ES Document、Index、Type、Id含义

  • 索引(index)类似于关系型数据库里的“数据库”——它是我们存储和索引关联数据的地方。
  • 类型(type)类似于关系型数据库里的“数据表”—— 这个类定义了属性或与对象关联的数据,user类的对象可能包含姓名、性别、年龄和Email地。
  • 唯一id(id)仅仅是一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。
  • 文档(document)类似于关系型数据库里的“数据,一个文档不只有数据。它还包含了元数据(metadata)。三个必须的元数据节点是:_index    文档存储的地方、_type    文档代表的对象的类、_id    文档的唯一标识

三、ES创建索引

  • 使用自己的ID如果你的文档有自然的标识符(例如user_account字段或者其他值表示文档),你就可以提供自己的_id,使用这种形式的index API:例如我们的索引叫做“website”,类型叫做“blog”,我们选择的ID是“123”,那么这个索引请求就像这样:
PUT /website/blog/123
{
  "title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2014/01/01"
}
  • 自增ID 如果我们的数据没有自然ID,我们可以让Elasticsearch自动为我们生成。请求结构发生了变化:PUT方法——“在这个URL中存储文档”变成了POST方法——"在这个类型下存储文档"。(译者注:原来是把文档存储到某个ID对应的空间,现在是把这个文档添加到某个_type下)。
POST /website/blog/
{
  "title": "My second blog entry",
  "text":  "Still trying this out...",
  "date":  "2014/01/01"
}

四、ES查询索引

  • 想要从Elasticsearch中获取文档,我们使用同样的_index、_type、_id,但是HTTP方法改为GET:GET /website/blog/123?pretty  响应包含了现在熟悉的元数据节点,增加了_source字段,它包含了在创建索引时我们发送给Elasticsearch的原始文档,pretty (格式化),GET请求返回的响应内容包括{"found": true}。这意味着文档已经找到。如果我们请求一个不存在的文档,依旧会得到一个JSON,不过found值变成了false。
{
  "_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"
  }
}
  • 检索文档的一部分通常,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"
}

五、ES更新

  • `created`标识为`false`因为同索引、同类型下已经存在同ID的文档。在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问它。Elasticsearch会在你继续索引更多数据时清理被删除的文档。
PUT /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>
}

五、ES删除

  • 删除文档的语法模式与之前基本一致,只不过要使用DELETE方法:DELETE /website/blog/123,如果文档被找到,Elasticsearch将返回200 OK状态码和以下响应体。注意_version数字已经增加了。
{
  "found" :    true,
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 3
}
如果文档未找到,我们将得到一个404 Not Found状态码,响应体是这样的:

{
  "found" :    false,
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 4
}

六、创建库索引的mapping结构 

{
    "mappings": {    //映射信息
       "typeName1": {   //类型名
          "properties": {   //类型下的字段信息
              "fieldName1": {   //字段名   
                 "type": "string",   //字段类型
                 "index": "not_analyzed"
              },
              "fieldName2": {   //字段名   
                 "type": "integer"   //字段类型
              }
           }
       },
       "typeName2": {   //类型名
          "properties": {   //类型下的字段信息
              "fieldName1": {   //字段名   
                 "type": "string"   //字段类型
              },
              "fieldName2": {   //字段名   
                 "type": "date"   //字段类型
              }
           }
       }
    }
}