搜索这个特性可以说是无处不在,现在很少有网站或者系统不提供搜索功能了,所以,即使你不是一个专业做搜索的程序员,也难免会遇到一些搜索相关的需求。搜索这个东西,表面上看功能很简单,就是一个搜索框,输入关键字,然后搜出来想要的内容就好了。
搜索背后的实现
- 可以非常简单,用一个SQL,LIKE一下就能实现
- 也可很复杂,不说百度谷歌这种专业做搜索的公司,其他非专业做搜索的互联网大厂,搜索团队大多是千人规模,这里面不仅有程序员,还有算法工程师、业务专家等等
区别仅是搜索速度快慢及搜出来的内容好坏。
倒排索引(Inverted Index)
数据大多存数据库,用SQL的LIKE也能实现匹配搜出结果,为啥还专门做搜索系统?
为啥数据库不适合做搜索?
搜索的核心需求是全文匹配,对此,数据库索引派不上用场,那只能全表扫描。全表扫描慢,还需要在每条记录上做全文匹配,即一个字一个字比对,就更慢。所以,使用数据做搜索,性能差。
ES咋解决搜索问题?假设两个商品:
- 烟台红富士苹果
- 苹果手机iPhone XS Max
| DOCID | SKUID | 标题 |
|---|---|---|
| 666 | 100002860826 | 烟台红富士苹果 5kg 一级铂金大果 单果230g以上 新鲜水果 |
| 888 | 100000177760 | 苹果 Apple iPhone XS Max (A2104) 256GB 金色 移动联通电信4G手机 双卡双待 |
DOCID就是唯一标识一条记录的ID,类似数据库主键。为支持快速全文搜索,ES对文本采用倒排索引。ES中这两条商品数据倒排索引:
| TERM | DOCID |
|---|---|
| 烟台 | 666 |
| 红富士 | 666 |
| 苹果 | 666,888 |
| 5kg | 666 |
| 一级 | 666 |
| 铂金 | 666 |
| 大果 | 666 |
| Apple | 888 | </

最低0.47元/天 解锁文章

2723

被折叠的 条评论
为什么被折叠?



