mysql层
like%全模糊%搜索,使用覆盖索引,有效,但要考虑索引所占空间,查询的字段少还可以
web 层
前端模糊查询,给后端精确结果,数据量大前端撑不住。如果某个模糊匹配条件字符串很长,同时数据量又比较大(w以上),那这个搜索做前端模糊一定会占用很多浏览器内存且卡顿;但另一种情况是,有多个搜索条件,但是每个条件只有几个字符,且数据量还可接收,这种情况下模糊匹配也是可以的
应用层
后端取全部数据,流过滤匹配。同样,要考虑内存使用问题,如果是分页就更蛋疼了。
中间件层
千万级数据
- ElasticSearch(开源,有很多功能,所以操作起来也很复杂)
- Algolia(专有,但有很棒的文档并且非常容易启动和运行)
- Typesense(开源,提供与 Algolia 相同的模糊搜索功能)