专业的编程技术博客社区

网站首页 > 博客文章 正文

Elasticsearch的核心真的是倒排索引吗?

baijin 2024-10-27 08:05:56 博客文章 9 ℃ 0 评论

大家好,我是贠学文,点击右上方“关注”,每天为您分享java程序员需要掌握的知识点干货。

之前在用mysql的时候,对like查询使索引失效的问题,苦恼了很长时间,一直没有什么好的方案,有人可能会说like查询的时候,只要不在前面加%,索引就不会失效,但是问题是这样满足不了用户的需求啊,用户就是要加,你能怎么办?


在后来,就接触到了es,因为es底层用了lucene做了分词,可以支持全文索引,就解决了mysql的like查询的问题。而且据说是es采用的是倒排索引,查询效率也比mysql高,当时我就对这个倒排索引产生了兴趣,它到底是什么样的原理,使查询效率变高呢?


带着这个问题,我就去网上搜了下倒排索引的原理,结果我搜出来以后,我就更加迷茫了,按照它的这个原理,那mysql不也是倒排索引么?有什么区别?凭什么同样的原理,es就比mysql快呢?


后来,我又深入的了解了一下es索引的,发现es效率高的原因,其实并不是因为倒排索引,而主要是以下三个原因:


1.采用lucene做分词,提高了模和模糊查询的效率。
2.在做复杂查询时,mysql会选择一个能过滤掉数据最多的字段作为索引,而es,每个索引都用的上,它会用跳表的方式,把每个索引查询出来的结果取交集,这样确实要比mysql快很多。
3.es在索引的前面,又加了一层索引树,存每个索引的前缀,这样即使数据量特别大的时候,也能快速定位索引的位置。


当然了,es效率比mysql高的原因,一定还有其他原因,但是我认为最主要的,就是这三点。至于什么倒排索引,搞的名字挺高大上的,其实纯纯就是误导人的

往期精彩:

一篇文章掌握程序员的技术体系

ThreadLocal优化方案

作者介绍:

贠学文,具有多有经验的java开发工程师,业余时间利用头条分享技术知识点与自己对技术的感悟,帮助对自己未来感到迷茫的程序员,在技术上得到提升。结识一些志同道合的朋友,相互促进,共同进步。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表