SpringBoot + 全文检索 + ngram 分词:中文模糊搜索响应毫秒级,支持错别字容错
一、中文搜索的痛点 上周,一位做电商的朋友找我抱怨:他们的商品搜索功能太烂了。"用户搜索 'iPhone 13',结果只出来几个完全匹配的,"他说,"如果用户输入 'iphone13'、'苹果13'、'IPHONE 13',甚至打错字成 'ihpone 13',要么找不到结果,要么响应很慢。" 我打开他们的APP试了一下,确实如此: 搜索 "iPhone 13":找到10个结果,响应时间300ms 搜索 "iphone13":找到0个结果 搜索 "苹果13":找到0个结果 搜索 "ihpone 13":找到0个结果,响应时间800ms "我们用的是MySQL的LIKE查询,"朋友无奈地说,"'%关键词%'这种写法,数据量一大就很慢,而且不支持中文分词和错别字容错。"这样的搜索体验,用户怎么可能满意? 二、传统搜索方案的局限性 为了实现中文搜索,我们通常会使用以下方案: 1. MySQL LIKE查询 SELECT * FROM product WHERE name LIKE '%关键词%' OR description LIKE '%关键词%'; 这种方案的问题: 性能差:使用....