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

关于全文检索

作者头像
只喝牛奶的杀手
发布2020-03-18 17:05:33
发布2020-03-18 17:05:33
70400
代码可运行
举报
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
复制
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 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档