深入理解ElasticSearch(ElasticSearch简介)读书笔记

Apache Lucene简介
  熟悉lucene:lucene内核可以创建为独立的Java库文件并且不依赖第三方代码,
  用户可以使用它提供的各种所见即所得的全文检索功能进行索引和搜索操作。
  lucene的总体架构:文档,字段,词项,词条
  倒排索引结构:lucene将写入索引信息组织成一种名为倒排索引结构,该结构是将词项映射到文档的数据结构

  每个索引由多个段组成,每个段会只被创建一次,但会被查询多次;
  索引期间段经创建就不会再被修改,段存在段合并的阶段(但是段合并是)

  分析你的数据
    文档中的数据转换为倒排索引
    查询串转换为搜索的词项 这个转换过程称为分析
    文本分析由分析器执行,而分词器,过滤器和字符映射器组成

    分词器
    分词器将文本切割成词条,其中携带额外信息的词项,这些信息包括:
    (词项在原始文本中的位置,词项的长度)分词器的工作成果称为词条流,
    因为这些词条被一个一个推送给过滤器处理;
   
    过滤器:
    除了分词器,过滤器也是lucene分析器的组成部分,过滤器数额可选,
    可以为0或者过个用于处理词条流中的词条,可以移除,修改,创建新的词条
    可用现成的,也可以自定义实现新的过滤器
        小写过滤器:ASCII过滤器:同义词过滤器:多语言词干还原过滤器
    
    索引与查询的文本分析要采用同样的分析器

  lucene查询语言
    基本概念
    一个查询通常分割为词项和操作符,查询中包含的布尔操作符
    And:左右两边词项都在文档中出现 OR:任意词项出现在文档中,NOT:不包含词项的文档;
    +:前者必须出现 后者不重要,-不能出现的词项
    在字段中查询:
        lucene所有数据存储在字段中,二字段又是文档的组成单位
        查询所有再title字段中包含词项elasticsearch的文档    
                    "title:elasticsearch"
    词项修饰符:
        最常见的修饰符是通配符(wildcard);lucene两种通配符?(任意一个字符)和*(多个字符)
        ~字符及随后的数字 与原始记录最大编辑距离;^字符赋予一个浮点数对词项加权boosting,
        以提高词项的 重要程度。如果都被加权,则赋值最大的值最重要;默认情况下词权重为1
     特殊字符处理:
        某些场景需要搜索特殊字符,先对特殊字符转义
        abc"efg这个词项 abc\"efg

ElasticSearch简介

ElasticSearch基本概念
索引,文档,映射,类型,节点,集群,分片,副本,网关
es集群的形式:单服务器多节点es服务器 多服务器节点
ES架构背后的关键概念
    从架构上看 ES具有下面主要特征
    合理的默认配置
    默认的分布式工作模式
    对等架构可以避免单点故障 (SPOF)(索引分片的自动复制)
    易于向集群扩充新节点(容量方向,和数量方向)
    es没有对索引中的数据结构加任何限制
    准实时搜索Near Real time和版本同步
ES的工作流程
    启动过程:当ES节点启动时,它使用广播技术来发现同一个集群中的其他节点并与他们链接
    

集群中会有一个节点被选为管理节点,该节点负责集群的状态管理以及集群拓扑变化时做出反应,
分发索引分片至集群的相应节点上,ES的管理节点和其他节点同样重要,实际上你不需要知道那个
节点是管理节点,所有操作可以发送至任意节点,ES内部会自行处理这些不可思议的事情,如果有
需要,任意节点可以并行发送子查询给其他节点,并合并搜索结果,然后返回给用户。所有这些操作
并不需要经过管理节点处理(ES是基于对等架构);
管理节点读取集群状态信息,会检查所有索引分片并决定哪些分片将用于主分片,然后整个集群进入黄色状态;
这意味着集群可以执行查询,因而接下来就是要寻找到冗余的分片并用作副本,如果某主分片的副本数过少
管理节点将决定基于某个主分片创建分片和副本,如果一切顺利,集群进入绿色状态;

故障检测
集群正常工作时:管理节点会监控所有可用节点,检查它们是否正在工作,如果任何节点在预定义的超时时间
内没有相应,则认为该节点已经断开,然后开启启动错误处理过程,这意味着要在集群和分片之前重新平衡,
因为之前断开节点上的那些分片不可用了,剩下的节点要肩负起相应责任。对每个丢失的主分片,一个新的主分片将会从原来的主分片的副本脱颖而出,

 

与ES通信 
    通过 RestAPI;
     创建索引:
            使用索引API
            bulkAPI
            udpbulkAPI
            插件发送数据
    建索引操作只发生在主分片上,而不是副本。当把一个索引请求发送至某个节点时,如果该节点没有对应
    的主分片或者只有副本,那么这个请求会被转发到拥有正确的主分片的节点

查询数据

查询阶段和合并阶段:
分散阶段:将query分发到包含相关文档的多个分片中取执行查询
合并阶段:从众多分片中收集返回结果

 

 


版权声明:本文为icool_ali原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。