1) 首先我们先要了解什么是Elasticsearch

    Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

    • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
    • 实时分析的分布式搜索引擎。
    • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

    2)类比Elasticsearch与mysql的区别

    Elasticsearch index(索引) Type(类型) Documents(文档) Fields(字段)
    mysql Database(数据库) Table(表) Row(行) column(列)

    我们可以通过上面的表格看出Elasticsearch和mysql之间的类比对应关系,但在最新的技术当中,Type的概念已经逐渐被落化了,具体的原因我们在下面会讲到。

    3)倒排索引
    再讲倒排索引之前,我们需要先讲一下什么是正排(正向)索引,现在有一张表,他的结构如下所示:
    ———————————————————————————-
    id context
    ———————
    1001 i am teacher
    1002 i am student
    ———————————————————————————-
    当我们把id定义为主键的时候,我们可以通过查询id,因为id与context建立索引关系所以可以快速找到对应的context,但现在的问题是,如果我只是想单纯的查那些字段中包含i这个单词呢?那我们就需要通过模糊查询先查i,然后通过i去找对应的context字段,这就大大加大了查询的一个成本,我们把这样的查询称为正向索引,一般在关系型数据库中使用较为频繁。

    那我们现在进入正题,什么是倒排索引呢?我们继续看一张表
    ———————————————————————————-
    context id
    ———————
    i 1001,1002
    am 1001,1002
    teacher 1001
    student 1002
    ———————————————————————————-

    现在通过上面这张表,如果我们想要查找i,我们可以直接查找i,然后通过i找到对应的1001序号和1002序号,这样的查询就是倒排索引,但是这样的索引我们会发现一个问题,他缺少了我们固定思维中表应该拥有的结构,所以这也是为什么在现在的技术中我们对Type的重视程度逐渐降低的原因。