一、Elasticsearch相关概念与Mysql对比

Elasticsearch是一套搜索引擎技术,整套技术栈的核心就是用来存储、搜索、计算的Elasticsearch。
完整的技术栈包括:
    · Elasticsearch:用于数据存储、计算和搜索
    · Logstash/Beats:用于数据收集
    · Kibana:用于数据可视化
可以通过对比Mqsql的属性字段,增加对Elasticsearch的了解:
MysqlElasticsearchES的补充描述
TableIndex索引=表
RowDocument文档[json]=行记录
ColumnFiled字段[域]=列
SchemaMaping映射[结构]=约束条件
SQLDSL语句=sql语句

二、倒排索引

倒排索引与正向索引的流程相反。

正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。

倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。

正向索引

先来回顾一下正向索引:
商品表

如果通过数据的独有id来进行精确搜索,获取该条信息的内容,非常快速。如果根据其它字段,如title或price进行搜索,只能通过遍历的方式一条条数据进行比对,效率很差。这就是正向索引。
  • 优点:

    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:

    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
因此,正向索引适合于根据索引字段的精确搜索,不适合基于部分词条的模糊匹配。
而倒排索引恰好解决的就是根据部分词条模糊匹配的问题。

倒排索引

倒排索引中有两个非常重要的概念:
1、文档(Document):被搜索的数据,每一条数据就是一个文档,相当于mysql中的row一行记录。
2、词条(Term):对文档或用户搜索的数据利用算法分词,得到的具备含义的词语就是词条。
例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条。

搜索流程:
倒排索引流程

1)建立词条库:
先把文档内容进行分词,形成词条与文档ID的对应关系:词条库(词条具备唯一性),建立索引。
2)搜索匹配:
对搜索内容进行分词,得到一个关键词列表。关键词与词条库进行匹配,找到对应的文档ID列表。
3)获取搜索结果信息:
根据文档ID列表,找到对应的文档信息。
  • 优点:

    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:

    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序
虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描,效率极高。

在实际开发应用,需要根据不同的需求,选择对应的搜索方式,可以提高程序运行效率。


玉喵
1 声望2 粉丝

学习成长的鸡肋 好好好不积累要鸡肋