请教:输入汉字拼音首字母,模糊查询数据 - CNode技术社区

请教:输入汉字拼音首字母,模糊查询数据
发布于 7 年前 作者 iori2882 4862 次浏览 来自 问答

输入汉字拼音首字母,模糊查询数据,目前只有数据中预存拼音这一种方法么?比如数据库表中有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了

回到顶部

AltStyle によって変換されたページ (->オリジナル) /