请教:输入汉字拼音首字母,模糊查询数据
输入汉字拼音首字母,模糊查询数据,目前只有数据中预存拼音这一种方法么?比如数据库表中有name pinyin2个字段 里面存储数据 name:张三 pinyin:zhangsan,name:赵四 pinyin:zhaosi,查询输入zs,后台查询数据库pinyin这个字段,结果集为张三和赵四,就和高铁app上面查询车站那个搜索需求是一样的,主要前期设计数据库的时候没有设计pinyin这个字段,现在客户需求这个功能…有没有更好的办法解决呢?
6 回复
跑一遍脚本,给拼音加上
可以用ik-pinying分词器实现
额,目前解决这种需求,还是在数据库里加拼音字段是最好最快的解决方法了么?
最方便/高性能的手段肯定是加字段,生成拼音时可以预先提取 zs 这样的数据。
我们的后台有类似的功能,输入管理员的部分 id 模糊查询。 数据库部分不动,独立用一个基于 redis zset 的方案。 定时任务,遍历所有id, 创建对应的 reverse set;zset 的 score 可以自己定义,也可以都是零,redis 就会字典序排序了。 例如有id: [ pl, le], 创建如下 zset
zset:p = {pl}
zset:l = {pl, le}
zset:e = { le}
const chars = searchText.split('').filter(c => c.trim())
const zsets = chars.map(c => `zset:${c}`)
const batch = redisClient.pipeline()
var destination = 'dest' + uuid()
const res = await batch.zinterstore(destination, zsets.length, zsets)
.zrevrangebyscore(destination, '+inf', '-inf', 'limit', 0, 10)
.del(destination)
.exec()
const hitedId = res[1][1] || []
hitedId 就是模糊命中的 id了
@stormslowly 嗯,谢谢