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" //字段类型
}
}
}
}
}