前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于全文检索

关于全文检索

作者头像
只喝牛奶的杀手
发布2020-03-18 17:05:33
6860
发布2020-03-18 17:05:33
举报

我们都知道关于全文检索大多公司的选型都是ElasticSearch,为什么是它?可能有的人会回复Es利用倒排索引适用于全文检索,倒排索引怎么存的?倒排索引为什么这么优秀?为什么不是MySql和Redis等(这里只拿代表的关系型数据库MySql和内存型数据库Redis举例子?

我们先说为什么不选择MySql和Redis来讲,为什么不选择MySql?我们先从MySql的索引存储结构来讲,大家都知道MySql的索引存储结构是B+Tree,如果执行下面全文检索的SQL会走索引吗?

代码语言:javascript
复制
SELECT * FROM company WHERE title LIKE "%工控猫%";

答案肯定是不能走。不走索引,数据量大的时候就会有磁盘IO的瓶颈。

放到内存里面啊,内存里面很快啊,为什么不用Redis做?当然如果你们公司足够有钱可以考虑,1PB的数据要用内存存储,需要多少节点,大兄弟,内存那么贵,没有闻到钱在燃烧的味道吗!?

为什么全文索引选择ElasticSearch?可能大家讲Es更新数据的时候是准实时,空间换时间了,这样讲也没错,主要有下面四点:

  • 倒排索引
  • 索引与数据分离
  • 索引数据存储内存
  • 压缩数据

倒排索引是怎么构成的?是有Term Index,Term Dictionary和Posting List三部分构成的,Term-Index存储在内存中,Term Dictionary和Posting List存储在硬盘。

Term Dictionary的基础上添加了Term Index来加速检索,term index 以树的形式缓存在内存中。从成本和效率来讲ES是一个优秀的解决方案。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档