Java|小数据量场景的模糊搜索体验优化
2025年4月23日 00:00
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
场景
假设有一张表 t_course
,数据量在三到四位数,字段 name
需要支持模糊搜索。用普通的 LIKE
语句,比如:
SELECT id, name FROM t_course WHERE name LIKE '%2025数学高一下%';
结果却查不到 2025年高一数学下学期
。这就很尴尬了,用户体验直接拉胯。
方案探索
1. MySQL 全文索引
首先想到 MySQL 的全文索引,但要支持中文分词得改 ngram_token_size
配置,还得重启数据库。为了不动生产环境配置,果断放弃。
2. Elasticsearch
接着想到 Elasticsearch,但对这么简单的场景来说,未免有点“杀鸡用牛刀”。于是继续寻找更轻量的方案。
3. 自定义分词 + MySQL INSTR
最后想到一个“土办法”:先对用户输入进行分词,再用 MySQL 的 INSTR
函数匹配。简单粗暴,但很实用。
实现
分词工具
一开始用了 jcseg
分词库,写了个工具类:
public class JcSegUtils {
private static final SegmenterConfig CONFIG = new SegmenterConfig(true);
private static final ADictionary DIC = DictionaryFactory.createSingletonDictionary(CONFIG);
public static List<String>...
剩余内容已隐藏
查看完整文章以阅读更多
Java|小数据量场景的模糊搜索体验优化
2025年4月23日 00:00
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
场景
假设有一张表 t_course
,数据量在三到四位数,字段 name
需要支持模糊搜索。用普通的 LIKE
语句,比如:
SELECT id, name FROM t_course WHERE name LIKE '%2025数学高一下%';
结果却查不到 2025年高一数学下学期
。这就很尴尬了,用户体验直接拉胯。
方案探索
1. MySQL 全文索引
首先想到 MySQL 的全文索引,但要支持中文分词得改 ngram_token_size
配置,还得重启数据库。为了不动生产环境配置,果断放弃。
2. Elasticsearch
接着想到 Elasticsearch,但对这么简单的场景来说,未免有点“杀鸡用牛刀”。于是继续寻找更轻量的方案。
3. 自定义分词 + MySQL INSTR
最后想到一个“土办法”:先对用户输入进行分词,再用 MySQL 的 INSTR
函数匹配。简单粗暴,但很实用。
实现
分词工具
一开始用了 jcseg
分词库,写了个工具类:
public class JcSegUtils {
private static final SegmenterConfig CONFIG = new SegmenterConfig(true);
private static final ADictionary DIC = DictionaryFactory.createSingletonDictionary(CONFIG);
public static List<String>...
剩余内容已隐藏
查看完整文章以阅读更多