走进Elasticsearch

Elasticsearch是什么

  • Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTflu接口全文搜索引擎。
  • Elasticsearsh还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。
  • 它可以在很短的时间内存储、搜索和分析大量的数据。
  • 目前是全球最受欢迎的全文搜索引擎。

它具有以下特性:

  • 横向可扩展性:
    • 水平扩展:增加更多的服务器
    • 垂直扩展:购置性能更强的服务器
  • 分片机制提供更好的分布性:同一个索引分成多个分片(sharding),类似于HDFS的块机制,分而治之的方式可提升处理效率;
  • 高可用:提供副本(replica)机制,一个分片可以设置多个副本,使得某台服务器在宕机的情况下,集群仍然可以正常提供服务,并会吧服务器宕机丢失的数据复制恢复到其他可用节点上。
  • 使用简单:只需要一条命令就可以下载文件,并且很快搭建一个站内搜索引擎。

    Elasticsearch协同产品

  • Beats:它是一个代理,用于将不同的数据发送到Elasticsearch中。官方提供了以下三个工具:

    • Filebeat:用来收集日志
    • Topbeat:用来收集系统基础设置数据,如CPU、内存、每个进程的统计信息
    • Packetbeat:网络包分析工具,统计收集网络信息
  • Shield:为Elasticsearch提供企业级的安全性、加密通信、认证保护,它是基于角色的访问控制与审计。
    • 注意:Shield是收费的产品。
  • Watcher:为Elasticsearch提供警报和通知工具,它主动检测Elasticsearch的状态,并在有异常的时候进行提醒,它还可以根据你的数据变化情况来采取不同的处理方式。
    • 注意:Watcher是收费的产品。
  • Marvel:它是Elasticsearch的管理和监控工具,它监测Elasticsearch集群索引和节点的活动,快速诊断问题。
    • 注意:Marvel是收费的产品
  • Logstash:数据管道,可以从多种数据源采取数据,输出到Elasticsearch.

    基础知识

  • 全文搜索:搜索程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,搜索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户。

  • Lucene:Lucene是目前全球使用最广泛的全文搜索引擎开源库。
    • Lucene是Apache软件基金会中一个开放源代码的全文搜索引擎工具包,是一个全文搜索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。
    • Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是依此为基础建立起完整的全文搜索引擎。
  • 倒序索引:实际应用总需要根据属性的值来查询记录,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。
    • 由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因此称为倒排索引(inverted index)。
    • 带有倒排索引的文件,我们称为倒排索引文件,简称倒排文件(inverted file)。
    • 倒排索引中的索引对象是文档或者文档集合中的单词等,用来存储这些单词在一个文档或者一组文档中的存储位置,是对文档或者文档集合的一种最常见的的索引机制。
    • 搜索引擎的关键步骤就是建立倒排索引,倒排索引一般表示为一个关键词,然后是它的频率(出现的次数)、位置(出现在哪一篇文章或者网页中,及有关的日期,作者等信息)。
    • Lucene使用的是倒排文件索引结构,步骤如下:
      1. 取得关键词(在Lucene中由Analyzer类完成)
        • 英文单词由于是用空格分隔,比较好处理。中文单词间由于是连在一起得,所以需要特殊得分词处理。
        • 不代表概念得词可以过滤掉,如”too”、”的”
        • 所有单词统一大小写
        • 把类似的词关联起来,如:”lives””lived”和”live”需要关联
        • 文章中的标点服号通常不表示某种概念,可以过滤掉。
      2. 建立倒排索引:记录关键词在文章中出现的次数和位置,通常有两种位置:
        • 字符位置:即记录该词在文章中的第几个字符(可以快速定位关键词)
          • 出现位置
        • 关键词位置:记录该词是文章中第几个关键词(可以节省索引空间,词组查询快)
          • 出现频率
        • 关键词是按照字符顺序排序的(Lucene没有使用B树结构),因此Lucene可以使用二元搜索算法快速定位关键词。
      3. 实现:Lucene将关键词、出现频率、出现位置分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件(positions)保存。
        • 词典文件:词典文件不仅保存了每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该概念机词的频率信息和位置信息。


面试题

Elasticsearch面试集

参考

书籍

  • 《ElasticSearch分布式高级特性》
  • 《Elasticsearch技术解析与实战》
  • 《Elasticsearch权威指南(中文版)》
  • 《实战Elasticsearch、Logstash、Kibana:分布式大数据搜索与日志挖掘及可视》
  • 《搜索引擎核心技术与实现(基于Lucene和Solr)》

百度网盘分享(提取码:code ):