ElasticSearch 节点管理
我们杀死的是主节点,一个集群必须有一个主节点才可以正常运转,所以第一个事情是:选举一个新的主节点,比如节点2.
主分片1和2已经丢失,我们的索引无法正常运行因为失去了主分片,如果我们此时查看集群状况,我们会看到红色。
幸运的,之前的主分片1和2都在其它机器上有备份,所以,新的主节点需要做的是:让这些失去的分片的备份晋升为主分片,
这使得集群健康状态变为黄色,为什么是黄色?因为之前设置了从分片的个数不是1而是大于1.所以是黄色。这个过程是立即执行的。
下面解释了为啥是黄色状态不是绿色。
到了这里,你应该对es如何水平扩容有所了解,并且你的数据是安全的,后面将讲更多的细节!
http://my.oschina.net/qiangzigege/blog/264206
在es里,所有的数据的每个域默认都被建立索引,也就是说,每个字段,有一个专门的倒排索引,用来快速检索,
并且,不像大多数数据库,es可以使用所有这些倒排索引,并且快速返回结果。
http://my.oschina.net/qiangzigege/blog/264228
大多数实体或者对象可以序列化为一个JSON对象,包含key/value.
key是一个域的名字或者属性,value就是字符串,数字,boolean,另一个对象,数组或者一些其它特定类型比如
字符串表示一个日期或者一个文档表示一个地理位置数据。
{
"name": "John Smith",
"age": 42,
"confirmed": true,
"join_date": "2014-06-01",
"home": {
"lat": 51.5,
"lon": 0.1
},
"accounts": [
{
"type": "facebook",
"id": "johnsmith"
},
{
"type": "twitter",
"id": "johnsmith"
}
]
}
通常,我们使用复数对象和文档,尽管如此,有一个区别,对象仅仅是一个JSON对象,比如哈希,hashmap,字典或者数组,
objects可以包含其他的objects.
在es里,term文档有一些特定的意义,这得参照被序列化成JSON存储在ES里的带有唯一ID的那些文档。
http://my.oschina.net/qiangzigege/blog/264232
一个文档不仅仅包含数据,也有元数据-关于文档的信息。三个需要的元数据元素包括:
_index:表示数据存在哪。
_type:文档表示的对象类型。
_id:文档的唯一标识。
_index:
一个索引,就像是一个关系型数据库里的数据库,我们在索引里存储数据和索引数据。
自然地,在es里,我们的数据存储在分片里,也索引在分片里,一个索引仅仅是一个逻辑命名空间,用来分组一个或者多个分片,
尽管如此,这都是内部细节,我们的工程不需要关注分片,工程最多需要知道,文档在索引里,es才需要关注细节。
我们将讨论如何创建和管理索引,但是现在我们让es自动为我们创建索引,我们需要做的是选择一个索引名字,
索引的名字必须小写,不能以下划线开始,不能包含逗号,让我们使用website作为索引名字。
_type
我们使用对象来表示物体,比如用户等,每个对象属于一个类,这个类表示了跟对象相关的属性和数据。
比如一个用户的对象可以包含一个名字,性别,年龄和邮箱地址。
在传统的数据库里,我们通常存储同类的对象在同一个表里,因为它们有共同的数据结构,基于此,在es里,我们使用同样的方式。
每个type,有自己的映射和语法定义,这些定义约束了下面的文档,所有type的文档可以存储在一个index里,但是映射规则告诉了es如何来索引每个文档。
我们将讨论如何描述和管理映射,但是现在,我们将依赖es来自动决定我们的文档的数据结构。
type的名字可以大小写,都可以,但是不应该以下划线开始,不能包含逗号,我们使用"user".
_id
id是一个字符串,和index和type关联,具备唯一性,当创建一个新的文档,你可以自己提供_id或者让es自动分配。
其它元数据:
有一些其它的元数据元素,后续会讨论,依赖于上面的3个元素,我们已经可以存储数据和检索了。
http://my.oschina.net/qiangzigege/blog/264239
文档被索引,存储,可以搜索,这是通过index API.
但是首先,我们需要决定文档存在哪,正如我们所讨论的,
使用自己的_id.
如果你的文档有天然的区别字段,比如账号等,你可以提供自己的_id.
PUT /{index}/{type}/{id}
{
"field": "value",
...
}
比如,如果索引是website,type是blog,我们选择id为123,
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2014/01/01"
}
响应如下:
{
"_index": "website",
"_type": "blog",
"_id": "123",
"_version": 1,
"created": true
}
响应意味着索引请求已经成功并且包含了index,type和id元数据,还有一个新的元素:_version.
每个文档有一个version数字,每次的改变都会反映到文档里,包含删除。
每次加1,
自增ID
如果数据没有天然ID,让ES自动生成,
格式如下:
POST /website/blog/
{
"title": "My second blog entry",
"text": "Still trying this out...",
"date": "2014/01/01"
}
响应:
{
"_index": "website",
"_type": "blog",
"_id": "wM0OSFhDQXGZAWDf0-drSA",
"_version": 1,
"created": true
}
自增的ID是22个字符长度,URL安全,base64编码的字符串。
http://my.oschina.net/qiangzigege/blog/264260
为了检索文档,我们使用同样的_index,_type和_id.
动作换成GET.
GET /website/blog/123?pretty
响应包含了熟悉的元数据,加上_source字段,source包含了原始的JSON对象。
{
"_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"
}
}
响应包含 {"found": true}. 意味着文档找到了,如果我们找不存在的文档,found就会为false.
另外,HTTP的响应码可能为404,而不是202,我们可以传入-i参数(curl).
curl -i -XGET /website/blog/124?pretty
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=UTF-8
Content-Length: 83
{
"_index" : "website",
"_type" : "blog",
"_id" : "124",
"found" : false
}
检索一个文档的一部分
默认下,响应会返回整个文档,也许你只对title字段感兴趣,可以通过_source参数来过滤。
多个字段用逗号隔开。
GET /website/blog/123?_source=title,text
响应如下:
{
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 1,
"exists" : true,
"_source" : {
"title": "My first blog entry" ,
"text": "Just trying this out..."
}
}
或许你只想要source而不要meta数据。
GET /website/blog/123/_source
响应如下:
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2014/01/01"
}
http://my.oschina.net/qiangzigege/blog/264275
如果你想确定一个文档是否存在而不关注内容,
使用HEAD方法而不是GET,HEAD不返回内容,仅仅返回HTTP头。
curl -i -XHEAD /website/blog/123
文档存在时的响应:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
不存在时,返回404.
curl -i -XHEAD /website/blog/124
HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
当然,现在不存在不代表之后不存在,另一个进程可能创建了。
http://my.oschina.net/qiangzigege/blog/264285
页:
[1]