网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

Elasticsearch如何告别LIKE,实现亿级数据毫秒级返回?

GG网络技术分享 2026-01-19 15:03 0


Elasticsearch 搜索实战 | 告别 LIKE:亿级数据毫秒返回的秘密

文章浏览阅读577次。_elasticsearch olap响应时间 Elasticsearch如何Zuo到亿级数据查询毫秒级返回? Zui新推荐文章于 2023- 反思一下。 07-25 16:30:03发布 韩韩韩_qqZui新推荐文章于 2023-07-25 16:30:03发布 阅读量577 收藏 1 点赞数 2 篇文章 0 订阅 0

前言:LIKE的无奈与性Neng的呼唤

说实话,我之前也是被LIKE坑惨了!当初项目刚起步的时候,业务简单,数据量小,用MySQL的LIKE查个东西还Neng凑合。但yin为用户越来越多, 数据像滚雪球一样越滚越大,几百万条数据还Neng忍,可是一旦超过几千万、上亿,那感觉就跟在水泥里奔跑一样…痛苦!每次搜索dou要等半天用户体验直接爆炸。geng别提那些复杂的模糊匹配了...简直就是噩梦,礼貌吗?!

为什么LIKE不行?它真的太天真了!

全表扫描的噩梦

LIKE查询Zui可怕的地方在于它的全表扫描特性。想想kan, 如guo你的表里有1亿条记录,而你用`WHERE column LIKE '%keyword%'`这样的语句去查东西,数据库只Neng一根筋地把每一条记录dou拿出来检查一下是不是包含这个关键词。这效率…简直让人崩溃。

索引失效的悲剧

开倒车。 即使你给column加了索引, 如guo你的LIKE语句是以通配符开头的,索引也会失效。主要原因是数据库不知道从哪里开始查找啊!只Neng老老实实地全表扫描了。

Elasticsearch:救星还是炒作?

听朋友说ES牛逼哄哄Neng解决这个问题,NengZuo到几百万甚至上亿的数据也Neng秒返回,我一开始是持怀疑态度的。毕竟我Yi经被各种“高性Neng”的技术坑过太多次了。dan是为了解决问题,还是决定试一试. 我在开发二十次幂的过程中,Zui开始在数据量hen小的时候,用MySQL还Neng勉强应付,等到数据量超过10万的时候,用like查询搜索关键字就显得特bie吃力,而且搜索质量fei常差.,何必呢?

告别LIKE:ES的秘密武器

倒排索引:核心大法

物超所值。 ES的核心在于它的倒排索引。简单来说就是把文档中的每个词dou记录下来ran后建立一个从词到文档的映射关系。这样当你搜索一个关键词的时候, ES可yi直接找到包含这个关键词的suo有文档,而不需要像LIKE那样去扫描整个表。

分词器:让ESgeng懂你的语言

要我说... 分词器负责把文本拆分成一个个独立的词语。不同的分词器有不同的规则和策略。选择合适的分词器dui与提高搜索精度和召回率至关重要。

分词器 适用场景 优点 缺点
Standard Analyzer 通用文本 简单易用 对中文支持较差
IK Analyzer 中文文本 对中文分词效果好配置稍复杂
Whitespace Analyzer 按空格分词 速度快 不适合复杂文本

查询DSL:灵活定制你的搜索

呃... ES提供了一个强大的查询DSL,你可yitong过它来构建各种复杂的查询语句. 这玩意儿一开始上手有点难,dan是熟练掌握之后,你会发现它比SQL强大多了.

优化技巧:让ES飞起来

Filesystem Cache:缓存是王道

写入 ES 的数据Zui好小于等于,huo者是略微大于 ES 的 Filesystem Cache 的内存容量. 如guo你的机器内存足够大,那么就把suo有的数据dou加载到内存中. ran后你从 ES 检索可Neng就花费 20ms.

冷热数据分离:让资源得到充分利用

将不经常访问的热点数据存储到 SSD 上面进行读取;将不常用的历史数据存储到 HDD 上面进行读取,麻了...。

Document模型设计:合理的设计才Neng提升性Neng

Document模型设计不好也会影响性Neng哦!想想kan如guo一个document里面有hen多个字段dan是又hen少用到的话那岂不是浪费空间了吗? 干就完了! suo以要尽量精简document模型只保留必要的字段即可

分页优化:小心深分页陷阱

你翻页的时候,翻的越深,每个 Shard 返回的数据就越多,而且协调节点处理的时间越长,fei常坑爹.suo以用 ES Zuo分页的时候,你会发现越翻到后面就越是慢.,也许吧...

真实的案例分享

告别痛苦拥抱未来


提交需求或反馈

Demand feedback