elasticsearch学习记录

1、elasticsearch和传统关系型数据库的对比:

1.索引(Index)

索引包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的document。比如说建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。

2.类型(Type)

每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。

3.文档(document)

文档是es中的最小数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中,都可以去存储多个document。

4.字段(Field)

文档内的一个基本单位,键值对形式(book_name : “learning elk”)。Field是Elasticsearch的最小单位。一个document里面有多个field,每个field就是一个数据字段。

eg: 商品index,里面存放了所有的商品数据,商品document

但是商品分很多种类,每个种类的document的field可能不太一样,比如说电器商品,可能还包含一些诸如售后时间范围这样的特殊field;生鲜商品,还包含一些诸如生鲜保质期之类的特殊field

type:日化商品type,电器商品type,生鲜商品type

2、elasticsearch的分布式高可用集群

1.分片(Shard)

分片是实际的物理实体用于存储每个索引的数据。每个索引都可以有大量的主和复制分片。分片分布在集群中的所有节点中,可以在节点故障或新节点添加时从一个节点移动到另一个节点。

2.主分片(Primary shard)与备份分片(replica shard)

备份分片通常驻留在一个不同的节点上,而不是主碎片,在故障转移和负载平衡的情况下,可以满足多个请求。

3.集群(Cluster)

集群是存储索引数据的节点集合。elasticsearch提供了水平的可伸缩性用以存储集群中的数据。每个集群都由一个集群名称来表示,不同的节点指明集群名称连接在一起。集群名称在elasticsearch.yml中的cluster.name的属性设置,它默认为“elasticsearch”:

4.节点(Node)

节点是一个单独运行的elasticsearch实例,它属于一个集群。默认情况下,elasticsearch中的每个节点都加入名为“elasticsearch”的集群。每个节点都可以在elasticsearch中使用自己的elasticsearch.yml,它们可以对内存和资源分配有不同的设置。

master节点:整个集群的大脑(管理者),现役会经过选举(Bully算法)。出现最终选举结构形成一个领导整个集群的master.维护集群中所有数据的元数据信息(分片大小,从分片的个数,主分片从分片对应的存储节点信息,分片对应的索引文件等等)

data node:负责读写数据,管理数据分片

协调器:创建和运行的集群中,实现各种集群状态的同步工作,只要保证高可用就可以,不需要大量协调器存在

在一个搜索里存储的数据,潜在的情况下可能会超过单个节点的硬件的存储限制,为了解决这个问题,elasticsearch便提供了分片的功能,它可以将索引划分为多个分片,当你创建一个索引的时候,你就可以简单的定义你想要的分片的数量,每一个分片本身是一个全功能的完全独立的索引,可以部署到集群中的任何一个节点。分片的两个重要原因:

(1)它允许你水平切分你的内容卷

(2)它允许通过分片来分布合并执行操作来应对日益增长的执行量

复制(replica):在一个网络情况下,故障可能会随时发生,有一个故障恢复机制是必须的,为了达到这个目的,ES允许你制作一个或多个拷贝放入一个叫做复制分片或短暂的复制品中。复制对于以下两个主要原因很重要

(1)高可用。它提供了高可用的以来防止分片或者节点宕机,为此,一个非常重要的注意点就是绝对不要讲一个分片的拷贝放在跟这个分片相同的机器上。

(2)高并发。它允许你的分片可以提供超出自身吞吐量的搜索服务,搜索行为可以在分片所有的拷贝中并行执行。

总之,一个完整的流程就是,ES客户端将一份数据写入primary shard,它会将数据分成成对的shard分片,并将数据进行复制,ES客户端取数据的时候就会在replica或primary 的shard中去读。

ES集群有多个节点,会自动选举一个节点为master节点,这个master节点其实就是干一些管理类的操作,比如维护元数据,负责切换primary shard 和replica shard的身份之类的,要是master节点宕机了,那么就会重新选举下一个节点为master为节点。

ES的选主机制:主要根据以下三个方面来进行ES的选举:

    1、对有资格成为Master的节点进行NodeId排序,每一次选举都将自己识别的节点进行排序,然后选择第一位的节点,暂且认为它是主节点(注意:暂定)

    2、如果某一个几点的投票数达到了 N/2+1,并且此节点自己也投给了自己一票,那么就选举这个节点为主节点。否则,重新选举。

    3、对于brain split问题,需要把候选master节点最小值设置为可以成为master节点数n/2+1(quorum )

选主机制图解

如果因为断网的问题,将集群分为了两个部分,那么这两个部分只能在自己的圈子里去选择主节点。因为,左边的部分只有两个节点 没有达到N/2+1,所以很遗憾,左边的部分没有资格去产生主节点。所以,就不会出现选择两个主节点的问题。同理,右边的部分符合条件,则可以选择主节点。

脑裂的产生,是因为master集群出现的波动,导致原来的master本来没有宕机被判断宕机,集群出现多个master管理的情况,导致dataNode同步的元数据出现不稳定,最终影响数据的使用-----es中可以通过过半的master最小有效数量,防止脑裂的出现

如果是非master宕机了,那么就会有master节点,让那个宕机的节点上的primary shard的身份转移到replica shard上,如果修复了宕机的那台机器,重启之后,master节点就会控制将缺失的replica shard 分配过去,同步后续的修改工作,让集群恢复正常。

3.基本分词器测试:

WhitespaceAnalyzer:空格分词器

StandardAnalyzer:标准分词器(一个字符分一个词项)

SimpleAnalyzer:一个标点符号分一个词项(句)

SmartChineseAnalyzer:智能中文分词器

IKAnalzyer:常用的一个中文分词器,支持词语的扩展和停用

分词结果输出

IK分词器和Smart分词器的对比:

i、二者对于中文的分词效果相对其他分词器,效果都更加,分词效果都是值得肯定的。

ii、smartcn分词器是lucene4.6版本之后自带的,中文分词效果不错,英文分词有问题,Lucene分词之后变成了Luncn

iii、IKAnalyzer分词之后,碎片太多,可以和人工分析效果最对比。

iiii、从自定义词库的角度做对比,因为smartcn是lucene自带的,目前不支持自定义词库,成为致命缺陷,因此只能放弃。

4、常用命令:

查看product索引信息:curl -X GET "localhost:9200/product?pretty=true"

查看es中的全部索引:curl 'http://localhost:9200/_cat/indices?v'

查看索引列表:curl -X GET "http://localhost:9200/_cat/indices?v&h=i&s=i"

添加文档curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/product/Snack/1' -d '{"name": "小当家方便面"}'

查看索引数据(文档)信息:curl -X GET "localhost:9200/{index}/{type}/_search"

添加索引别名:

删除索引别名:

修改索引别名:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容