一句话介绍 :Elasticsearch是「实时」「分布式搜索分析引擎」,内部使用 Lucene 做索引与搜索。
主要功能

  • 分布式搜索引擎

  • 大数据近实时分析引擎

产品特性

  • 高性能
  • 易用
  • 易扩展

1 与的关系 Lucene

Lucene

  • 是基于Java语言开发的类库
  • 具有高性能、易扩展的特点
  • 具有局限性
    • 只能基于Java语言开发
    • 类库的接口学习曲线陡峭
    • 原生并不支持水平扩展

与Lucene关系
ES是基于Lucene开发的,主要扩展点在于

  • 支持分布式
  • 可水平扩展
  • 降低了全文检索的学习曲线
  • 可以被其他编程语言调用

    2 生态圈

    image.png

    2.1 与数据库集成

    image.png

  • 单独使用ES存储

  • 与数据库并存,集成

    • 与现有系统的集成
    • 需要考虑事务性
    • 数据更新频繁

      2.2 日志分析

      image.png

      3 什么是Kibana

  • Kibana是操作ElasticSearch的图形化工具

  • 基于Node.js,可以通过web进行操作
  • 使用Kibana进行API操作时,有友好提示
  • Kibana工具可以生成各种图表

    4 与mysql

    2.1 ES简介 - 图4
    (1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
    (2)一个数据库下面有N张表(Table)等价于1个索引Index下面有N多类型(Type), 但是type适合放置java继承关系的类。

1 type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器
2 field的value,在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的
3 lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来进行type的过滤和筛选
4 一个index中的多个type,实际上是放在一起存储的,因此一个index下,不能有多个type重名,而类型或者其他设置不同的,因为那样是无法处理的


(3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
(4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
(5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.

本地部署与水平扩展

image.png

其中主要有如下几个核心术语需要理解:

  • 词条(Term): 索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。
  • 词典(Term Dictionary): 或字典,是词条 Term 的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
  • 倒排表(Post list): 一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting)。倒排表记录的不单是文档编号,还存储了词频等信息。
  • 倒排文件(Inverted File): 所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

从上图我们可以了解到倒排索引主要由两个部分组成:

  • 词典
  • 倒排文件

词典和倒排表是 Lucene 中很重要的两种数据结构,是实现快速检索的重要基石。词典和倒排文件是分两部分存储的,词典在内存中而倒排文件存储在磁盘上