首页
学习
活动
专区
工具
TVP
发布

关于全文检索

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

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

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

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

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

倒排索引

索引与数据分离

索引数据存储内存

压缩数据

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

Term Dictionary的基础上添加了Term Index来加速检索,term index 以树的形式缓存在内存中。从成本和效率来讲ES是一个优秀的解决方案。推荐一大神写的文章《时间序列数据库的秘密 (2)——索引》写的深入浅出。学习加实践才能出真知,技术人不要太肤浅。

每周一句:做什么事情,意愿是第一位,有意愿,但不擅长,只要不放弃,一定能达到,只是看快慢。有意愿,且擅长,是一种幸运。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200308A0NA8P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券