最近使用开心网,一些功能很有意思,比如发短消息的时候,你输入拼音,就可以提示出汉字,感觉真的很好玩,给用户的体验也很棒,效果如下图:

自己琢磨了一下,终于有点头绪了,写出来和大家分享下:

首先,这个东西不是输入法,所以拼音肯定建立在既有用户的基础上的,这就要求在用户注册的时候,将用户的姓名从汉字转化成拼音,这个比较简单,因为每个汉字都对应一个或几个拼音码,所以转换起来比较容易,以下js就是实现方法:

var spell = {0xB0A1:"a", 0xB0A3:"ai", 0xB0B0:"an", 0xB0B9:"ang", 0xB0BC:"ao", 0xB0C5:"ba", 0xB0D7:"bai", 0xB0DF:"ban", 0xB0EE:"bang", 0xB0FA:"bao", 0xB1AD:"bei", 0xB1BC:"ben", 0xB1C0:"beng", 0xB1C6:"bi", 0xB1DE:"bian", 0xB1EA:"biao", 0xB1EE:"bie", 0xB1F2:"bin", 0xB1F8:"bing", 0xB2A3:"bo", 0xB2B8:"bu", 0xB2C1:"ca", 0xB2C2:"cai", 0xB2CD:"can", 0xB2D4:"cang", 0xB2D9:"cao", 0xB2DE:"ce", 0xB2E3:"ceng", 0xB2E5:"cha", 0xB2F0:"chai", 0xB2F3:"chan", 0xB2FD:"chang", 0xB3AC:"chao", 0xB3B5:"che", 0xB3BB:"chen", 0xB3C5:"cheng", 0xB3D4:"chi", 0xB3E4:"chong", 0xB3E9:"chou", 0xB3F5:"chu", 0xB4A7:"chuai", 0xB4A8:"chuan", 0xB4AF:"chuang", 0xB4B5:"chui", 0xB4BA:"chun", 0xB4C1:"chuo", 0xB4C3:"ci", 0xB4CF:"cong", 0xB4D5:"cou", 0xB4D6:"cu", 0xB4DA:"cuan", 0xB4DD:"cui", 0xB4E5:"cun", 0xB4E8:"cuo", 0xB4EE:"da", 0xB4F4:"dai", 0xB5A2:"dan", 0xB5B1:"dang", 0xB5B6:"dao", 0xB5C2:"de", 0xB5C5:"deng", 0xB5CC:"di", 0xB5DF:"dian", 0xB5EF:"diao", 0xB5F8:"die", 0xB6A1:"ding", 0xB6AA:"diu", 0xB6AB:"dong", 0xB6B5:"dou", 0xB6BC:"du", 0xB6CB:"duan", 0xB6D1:"dui", 0xB6D5:"dun", 0xB6DE:"duo", 0xB6EA:"e", 0xB6F7:"en", 0xB6F8:"er", 0xB7A2:"fa", 0xB7AA:"fan", 0xB7BB:"fang", 0xB7C6:"fei", 0xB7D2:"fen", 0xB7E1:"feng", 0xB7F0:"fo", 0xB7F1:"fou", 0xB7F2:"fu", 0xB8C1:"ga", 0xB8C3:"gai", 0xB8C9:"gan", 0xB8D4:"gang", 0xB8DD:"gao", 0xB8E7:"ge", 0xB8F8:"gei", 0xB8F9:"gen", 0xB8FB:"geng", 0xB9A4:"gong", 0xB9B3:"gou", 0xB9BC:"gu", 0xB9CE:"gua", 0xB9D4:"guai", 0xB9D7:"guan", 0xB9E2:"guang", 0xB9E5:"gui", 0xB9F5:"gun", 0xB9F8:"guo", 0xB9FE:"ha", 0xBAA1:"hai", 0xBAA8:"han", 0xBABB:"hang", 0xBABE:"hao", 0xBAC7:"he", 0xBAD9:"hei", 0xBADB:"hen", 0xBADF:"heng", 0xBAE4:"hong", 0xBAED:"hou", 0xBAF4:"hu", 0xBBA8:"hua", 0xBBB1:"huai", 0xBBB6:"huan", 0xBBC4:"huang", 0xBBD2:"hui", 0xBBE7:"hun", 0xBBED:"huo", 0xBBF7:"ji", 0xBCCE:"jia", 0xBCDF:"jian", 0xBDA9:"jiang", 0xBDB6:"jiao", 0xBDD2:"jie", 0xBDED:"jin", 0xBEA3:"jing", 0xBEBC:"jiong", 0xBEBE:"jiu", 0xBECF:"ju", 0xBEE8:"juan", 0xBEEF:"jue", 0xBEF9:"jun", 0xBFA6:"ka", 0xBFAA:"kai", 0xBFAF:"kan", 0xBFB5:"kang", 0xBFBC:"kao", 0xBFC0:"ke", 0xBFCF:"ken", 0xBFD3:"keng", 0xBFD5:"kong", 0xBFD9:"kou", 0xBFDD:"ku", 0xBFE4:"kua", 0xBFE9:"kuai", 0xBFED:"kuan", 0xBFEF:"kuang", 0xBFF7:"kui", 0xC0A4:"kun", 0xC0A8:"kuo", 0xC0AC:"la", 0xC0B3:"lai", 0xC0B6:"lan", 0xC0C5:"lang", 0xC0CC:"lao", 0xC0D5:"le", 0xC0D7:"lei", 0xC0E2:"leng", 0xC0E5:"li", 0xC1A9:"lia", 0xC1AA:"lian", 0xC1B8:"liang", 0xC1C3:"liao", 0xC1D0:"lie", 0xC1D5:"lin", 0xC1E1:"ling", 0xC1EF:"liu", 0xC1FA:"long", 0xC2A5:"lou", 0xC2AB:"lu", 0xC2BF:"lv", 0xC2CD:"luan", 0xC2D3:"lue", 0xC2D5:"lun", 0xC2DC:"luo", 0xC2E8:"ma", 0xC2F1:"mai", 0xC2F7:"man", 0xC3A2:"mang", 0xC3A8:"mao", 0xC3B4:"me", 0xC3B5:"mei", 0xC3C5:"men", 0xC3C8:"meng", 0xC3D0:"mi", 0xC3DE:"mian", 0xC3E7:"miao", 0xC3EF:"mie", 0xC3F1:"min", 0xC3F7:"ming", 0xC3FD:"miu", 0xC3FE:"mo", 0xC4B1:"mou", 0xC4B4:"mu", 0xC4C3:"na", 0xC4CA:"nai", 0xC4CF:"nan", 0xC4D2:"nang", 0xC4D3:"nao", 0xC4D8:"ne", 0xC4D9:"nei", 0xC4DB:"nen", 0xC4DC:"neng", 0xC4DD:"ni", 0xC4E8:"nian", 0xC4EF:"niang", 0xC4F1:"niao", 0xC4F3:"nie", 0xC4FA:"nin", 0xC4FB:"ning", 0xC5A3:"niu", 0xC5A7:"nong", 0xC5AB:"nu", 0xC5AE:"nv", 0xC5AF:"nuan", 0xC5B0:"nue", 0xC5B2:"nuo", 0xC5B6:"o", 0xC5B7:"ou", 0xC5BE:"pa", 0xC5C4:"pai", 0xC5CA:"pan", 0xC5D2:"pang", 0xC5D7:"pao", 0xC5DE:"pei", 0xC5E7:"pen", 0xC5E9:"peng", 0xC5F7:"pi", 0xC6AA:"pian", 0xC6AE:"piao", 0xC6B2:"pie", 0xC6B4:"pin", 0xC6B9:"ping", 0xC6C2:"po", 0xC6CB:"pu", 0xC6DA:"qi", 0xC6FE:"qia", 0xC7A3:"qian", 0xC7B9:"qiang", 0xC7C1:"qiao", 0xC7D0:"qie", 0xC7D5:"qin", 0xC7E0:"qing", 0xC7ED:"qiong", 0xC7EF:"qiu", 0xC7F7:"qu", 0xC8A6:"quan", 0xC8B1:"que", 0xC8B9:"qun", 0xC8BB:"ran", 0xC8BF:"rang", 0xC8C4:"rao", 0xC8C7:"re", 0xC8C9:"ren", 0xC8D3:"reng", 0xC8D5:"ri", 0xC8D6:"rong", 0xC8E0:"rou", 0xC8E3:"ru", 0xC8ED:"ruan", 0xC8EF:"rui", 0xC8F2:"run", 0xC8F4:"ruo", 0xC8F6:"sa", 0xC8F9:"sai", 0xC8FD:"san", 0xC9A3:"sang", 0xC9A6:"sao", 0xC9AA:"se", 0xC9AD:"sen", 0xC9AE:"seng", 0xC9AF:"sha", 0xC9B8:"shai", 0xC9BA:"shan", 0xC9CA:"shang", 0xC9D2:"shao", 0xC9DD:"she", 0xC9E9:"shen", 0xC9F9:"sheng", 0xCAA6:"shi", 0xCAD5:"shou", 0xCADF:"shu", 0xCBA2:"shua", 0xCBA4:"shuai", 0xCBA8:"shuan", 0xCBAA:"shuang", 0xCBAD:"shui", 0xCBB1:"shun", 0xCBB5:"shuo", 0xCBB9:"si", 0xCBC9:"song", 0xCBD1:"sou", 0xCBD4:"su", 0xCBE1:"suan", 0xCBE4:"sui", 0xCBEF:"sun", 0xCBF2:"suo", 0xCBFA:"ta", 0xCCA5:"tai", 0xCCAE:"tan", 0xCCC0:"tang", 0xCCCD:"tao", 0xCCD8:"te", 0xCCD9:"teng", 0xCCDD:"ti", 0xCCEC:"tian", 0xCCF4:"tiao", 0xCCF9:"tie", 0xCCFC:"ting", 0xCDA8:"tong", 0xCDB5:"tou", 0xCDB9:"tu", 0xCDC4:"tuan", 0xCDC6:"tui", 0xCDCC:"tun", 0xCDCF:"tuo", 0xCDDA:"wa", 0xCDE1:"wai", 0xCDE3:"wan", 0xCDF4:"wang", 0xCDFE:"wei", 0xCEC1:"wen", 0xCECB:"weng", 0xCECE:"wo", 0xCED7:"wu", 0xCEF4:"xi", 0xCFB9:"xia", 0xCFC6:"xian", 0xCFE0:"xiang", 0xCFF4:"xiao", 0xD0A8:"xie", 0xD0BD:"xin", 0xD0C7:"xing", 0xD0D6:"xiong", 0xD0DD:"xiu", 0xD0E6:"xu", 0xD0F9:"xuan", 0xD1A5:"xue", 0xD1AB:"xun", 0xD1B9:"ya", 0xD1C9:"yan", 0xD1EA:"yang", 0xD1FB:"yao", 0xD2AC:"ye", 0xD2BB:"yi", 0xD2F0:"yin", 0xD3A2:"ying", 0xD3B4:"yo", 0xD3B5:"yong", 0xD3C4:"you", 0xD3D9:"yu", 0xD4A7:"yuan", 0xD4BB:"yue", 0xD4C5:"yun", 0xD4D1:"za", 0xD4D4:"zai", 0xD4DB:"zan", 0xD4DF:"zang", 0xD4E2:"zao", 0xD4F0:"ze", 0xD4F4:"zei", 0xD4F5:"zen", 0xD4F6:"zeng", 0xD4FA:"zha", 0xD5AA:"zhai", 0xD5B0:"zhan", 0xD5C1:"zhang", 0xD5D0:"zhao", 0xD5DA:"zhe", 0xD5E4:"zhen", 0xD5F4:"zheng", 0xD6A5:"zhi", 0xD6D0:"zhong", 0xD6DB:"zhou", 0xD6E9:"zhu", 0xD7A5:"zhua", 0xD7A7:"zhuai", 0xD7A8:"zhuan", 0xD7AE:"zhuang", 0xD7B5:"zhui", 0xD7BB:"zhun", 0xD7BD:"zhuo", 0xD7C8:"zi", 0xD7D7:"zong", 0xD7DE:"zou", 0xD7E2:"zu", 0xD7EA:"zuan", 0xD7EC:"zui", 0xD7F0:"zun", 0xD7F2:"zuo"}

var spellArray = new Array()

var pn = ""

function Trim(info){return info.replace(/(^\s*)|(\s*$)/g, "");}

function isEnKong1(argValue)

{

var flag=false;

var compStr=".?/">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()_-+=|\{[}]:;'.?/ ";

var length=argValue.length;

for (var iIndex=0;iIndex

{

var temp=compStr.indexOf(argValue.charAt(iIndex));

if(temp==-1)

{

flag=false;

}

else

{

flag=true;

}

}

return flag;

}

function pinyin(char)

{

if (!char.charCodeAt(0) ||char.charCodeAt(0) < 1328) return char

if (spellArray[char.charCodeAt(0)]) return spellArray[char.charCodeAt(0)]

ascCode=toAsc(char)

ascCode = eval("0x"+ascCode)

if (!(ascCode>0xB0A0 && ascCode<0xD7FC)) return char

for (var i=ascCode; (!spell[i] && i>0);) i--

return spell[i]

}

function toPinyin(str)

{

if (str){

var pStr = ""

for (var i=0; i

{

if (isEnKong1(str.charAt(i))) {

pStr += str.charAt(i);

}

else{

pStr += " " + pinyin(str.charAt(i));

}

}

return Trim(pStr);

}

}

document.write(toPinyin("木子屋 ([url]www.mzwu.com[/url])"));

感兴趣的朋友可以写成java般的,这样我们就得到用户名的拼音了,比如:“户起龙”,转换成拼音就是“huqilong”,此时你完全可以让用户输入“huqilong”来检索用户,可是有的用户想直接输入"hql"怎么办呢?细心的拼音会发现,"hql"其实是用户名的声母组合,拼音的声母是很少的,完全可以放到数组里,然后用正则匹配出来。

为了给用户好的体验我们保存两份,一份是姓名的全拼“huqilong”;另外一份是声母的简写"hql",我们可以分别存在两个字段里,这样就可以通过检查这两个字段进行匹配了。

但是这样匹配很产生效率瓶颈,因为大的网站可能有上百万人,检索起来很费劲的,你的ajax提示框可能一直再加载中状态,这样可不好,怎么办?

我想到的方法是:lucene   利用对所有的用户拼音建立索引文件,然后去查找此索引即可。这样效率会很高。

思路是这样子的,高人如有建议请留言

注:最近正再搞社区有关的东东,有兴趣的朋友可以讨论下,谢过!

java如何通过拼音搜索功能_如何实现拼音搜索相关推荐

  1. axure实现搜索功能_用Axure实验搜索原型

    这个十月,一直在边学Axure边做原型,发现中继器特别好玩,我用做的APP的一个使用中继器做的一个搜索功能谈谈我的学习 用中继器制作筛选,使用函数变量制作关键字变色 整个步骤关键有两步: 第一步,我们 ...

  2. java商品搜索功能_利用solr实现商品的搜索功能(实例讲解)

    后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可 ...

  3. 使用google map实现周边搜索的功能_「转」“搜索”的原理,架构,实现,实践,面试不用再怕了...

    可能99%的同学不做搜索引擎,但99%的同学一定实现过检索功能.搜索,检索,这里面到底包含哪些技术的东西,希望本文能够给大家一些启示. 全网搜索引擎架构与流程如何? 全网搜索引擎的宏观架构如上图,核心 ...

  4. html做一个京东搜索功能,连续动作:自动搜索关键词采集信息—以京东为例

    一.操作步骤 如果网页上有搜索框,但是搜索结果页面没有独立网址,想要采集搜索结果,直接做规则是采集不到的,要先做连续动作(输入+点击)来实现自动输入关键词并搜索,然后才能采集数据.下面用京东搜索为例, ...

  5. 小程序搜索框_微信小程序搜索及优化相关知识科普

    生活中我们常常会用到微信小程序,但很多人不知道该如何搜索.找到小程序:而有些已经做了自己的小程序的商家,也不懂怎么提升自己的微信小程序搜索效果.所以下面就跟大家科普下这两个问题. 1.怎么搜索微信小程 ...

  6. 计算机的搜索功能无法启用,电脑文件搜索功能无法使用的具体解决方法

    ? 如果我们不知道某个文件具体在电脑中的具体位置,那么可以在一定范围内通过电脑系统中的文件搜索功能来进行搜索.如果在电脑中发现不能搜索文件,那么应该怎么进行修复呢?大家可以参考下面的方法来解决这一问题 ...

  7. Android仿淘宝历史搜索功能,使用localStorage实现历史记录搜索功能也便是天猫app历史记录存储方便浏览...

    使用localStorage实现历史记录搜索功能也就是天猫app历史记录存储方便浏览 得益于H5的API,前端可以很方便的存储数据,除了cookie,新增的sessionStorage.localSt ...

  8. android实现分类搜索功能,android应用中的搜索功能怎么实现的

    GCT1015 在app应用中,至少要执行如下的三个步骤,才能让app应用能够进行检索.如果要提供搜索建议,还需要执行第4步: 编写搜索配置的XML文件 编写搜索的activity类 在Android ...

  9. 用java实现页面搜索功能_关于如何利用矩阵实现搜索功能

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package com; public class Test { public static void main(String[] args) { Str ...

  10. JAVA实现inotify一样的功能_哪些操作系统支持在Java中查看本机(类似inotify)文件

    JavaDoc for java.nio.file.WatchService状态; The implementation - is intended to map directly on to the ...

最新文章

  1. Libgdx环境搭建及介绍
  2. Linux-SFTP/SSH免密码登录
  3. ajax empty,jQuery empty仅在AJAX调用后的第二次单击时起作用
  4. 大数据驱动业务决策,CDN实时日志重磅上线
  5. 本地像服务器传文件,本地向服务器传送文件
  6. 自动驾驶—全局定位的学习笔记
  7. 手动编译cloudfoundry
  8. marlab中主成分得分怎么求_R语言 | 主成分分析(PCA)代码+讲解
  9. oracle财务系统表,Oracle ERP 财务模块表结构.ppt
  10. python爬虫爬取steam,epic,origin平台游戏数据
  11. JSON Viewer有个大bug导致不得不放弃掉
  12. PDF文件转换成什么格式最适合编辑?
  13. 编写自己的聊天网站(一)
  14. 双目线激光三维扫描技术原理剖析
  15. (原创)添加QQ好友日期爬虫01——总体思路
  16. 我的Docker学习笔记:从入门到实战过程全记录
  17. GHOSTXP_SP3电脑公司特别版_V2011.07
  18. windows python3 bz2怎么安装_正确地建造本地Python3,用bz2支持
  19. Laravel实现google-authenticator--Google二维码验证器
  20. VS番茄插件的常用快捷键(提高工作效率)

热门文章

  1. 2015年蓝桥杯省赛C++(A组) 第三题 奇妙的数字
  2. mysql用身份证号判断男女_如何根据身份证号码辨别性别呢
  3. php根据身份证号码确定地区(省份)地址
  4. 了解Go编译处理(三)—— 初识go compile
  5. SPSS软件应用于因子分析/相关性分析等统计分析方法解读
  6. 怎么评判网络舆情分析系统好不好的指标标准详解
  7. 简单分析暴风影音的最新0DAY菜鸟版
  8. 瑞星系统中心服务器地址如何修改,瑞星系统中心安装教程
  9. python爬去学校_利用Python如何爬取自己学校的官网?用这招就行!
  10. 数据加密以及国密基础知识