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
 

猜你喜欢

转载自aoyouzi.iteye.com/blog/2150979