倒排索引和ES相关概念对比MySQL

80 阅读2分钟

倒排索引

倒排索引的组成

倒排索引主要由两部分组成:

  1. 词项词典(Term Dictionary) :它保存了所有文档集合中出现的词项,并为每个词项提供一个唯一标识(词项ID)。这个词典通常按照词项的字母顺序组织。
  2. 倒排列表(Posting List) :对于词典中的每个词项,倒排列表记录了包含该词项的所有文档的文档ID及其在文档中的位置信息。位置信息可以是词项在文档中出现的次数、位置偏移量等。

倒排索引的构建过程

  1. 先把文档内容进行分词,形成词条与文档ID的对应关系,叫做词条库,词条具备唯一性,建立索引

image.png

  1. 对搜索内容进行分词,把分词后得到一个关键词列表,根据关键词去词条库中匹配,再找到对应的文档ID列表

image.png 3. 然后根据文档ID列表,找到对应的文档信息

倒排索引的查询过程

当用户提交一个查询请求时,搜索引擎会执行以下步骤:

  1. 查询处理:将用户的查询分解成一系列的词项。
  2. 检索倒排列表:对于查询中的每个词项,检索倒排列表以找到包含该词项的所有文档。
  3. 合并结果:使用布尔运算(如AND、OR、NOT)合并各个词项的检索结果,得到最终的文档列表。
  4. 排名:根据相关性评分算法(如TF-IDF、BM25、向量空间模型等)对结果进行排序,返回最相关的文档。

分词器

ES默认英文是一个单词一个词,中文是一个汉字一个词

需要安装中文分词器【有很多】

IK分词器:可以进行扩展词,也可以进行停用词

ik_smart:粗粒度切分,分出来的词少

ik_max_word:细粒度切分,分出来的词多

倒排索引

  • 优点:

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

    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

ES相关概念对比MySQL

Elasticsearch与MySQL的概念对比

MySQLElasticsearchES描述
TableIndex索引
RowDocument文档【json】
ColumnFiled字段【域】
SchemaMapping映射【结构】
SQLDSL语句