ES为什么快,什么是倒排索引

ES为什么快,什么是倒排索引

什么是文档和词条

  • 每一条数据就是一个文档
  • 对文档中的内容分词,得到的词语就是词条

什么是正向索引

基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条

什么是倒排索引

对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时可以现根据词条查询到文档id,而后获取到文档

例子

比如有一个华为手机,小米手机,苹果手机,三条数据

我们如果存入关系型数据库,比如mysql,MySQL 主要使用 B+树 来实现索引。当我们对这个字段创建索引的时候,Mysql会生成一个B+树结构,其中每个节点包含一个品牌数据的指针,指向对应的记录。查询时,mysql会在B+树中查找匹配的键值,代码如下

SELECT * FROM phones WHERE brand LIKE '%手机%';

在 Elasticsearch 中,我们会先定义一个索引并存储数据:

PUT /phones
{
  "mappings": {
    "properties": {
      "brand": {
        "type": "text"
      }
    }
  }
}
POST /phones/_doc
{ "brand": "华为手机" }
POST /phones/_doc
{ "brand": "小米手机" }
POST /phones/_doc
{ "brand": "苹果手机" }

ES使用倒排索引来加速文本搜索,在倒排索引中,对于每个唯一的词(小米,手机,华为,苹果)都会维护一个该词出现的位置

例如,倒排索引的结构可能如下:

  • “华为” → [文档1]
  • “小米” → [文档2]
  • “苹果” → [文档3]
  • “手机” → [文档1, 文档2, 文档3]

倒排索引与 MySQL 索引的区别

索引类型:

Mysql:使用B+树结构,适合范围查询和精准匹配,但对文本搜索的支持较弱

ES:使用倒排索引,专为快速文本搜索而设计,适合处理大规模的非结构化数据。

查询效率:

mysql中,like关键字,如果不符合最左匹配原则,即后缀或中间匹配,则会走全表扫描,性能很差

es中,借助倒排索引快速定位包含特定关键字的文档

posted @   iiiiiiiivan  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
历史上的今天:
2021-11-04 java发送邮件
2021-11-04 IDEA 错误 找不到或无法加载主类(完美解决)
点击右上角即可分享
微信分享提示