如何开发auto complete 智能提示功能
如何开发auto complete 智能提示功能
最近网上好像流传用redis实现,其实智能提示和用什么存储关系不大 07年,我过一个类似的项目
我有几千个名字,随着用户在输入框中不断输入汉字或者拼音,用一个下拉列表提示它可能的输入项
下拉框,选中状态,自然是用js做,这里主要讲一下后端代码怎么实现,原理很简单
这就是一个倒排索引表,我们要做的工作,主要是准备这个索引表的数据, 假设我有一个名字
鲁塔夫
第一步,为这个名字生成拼音,把汉字和拼音都放在一个文本文件里面,一行放一条
鲁塔弗
lutaf
第二步,用最大前序法切词,具体来说,就是吧 “鲁塔弗”--切成 3行
鲁
鲁塔
鲁塔弗
lutaf 这个拼音也一样的切成下面的形状
l
lu
lut
luta
lutaf
然后用一个hash表来装载这些切好的“字段”,每个key对应的value自然就是“鲁塔夫”
ds={}
ds['鲁']='鲁塔弗'
ds['鲁塔']='鲁塔弗'
ds['鲁塔夫']='鲁塔弗'
ds['l']='鲁塔弗'
....
ds['lutaf']='鲁塔弗'
几千个名字都可以如法炮制,但是遇到有相同前缀的怎么办?比如 “鲁塔弗”和“鲁冰花” 都会命中
鲁
l
lu
很简单,把刚才的哈希表的value从字符串变成list即可,一个前缀对应一个列表,列表里面每个元素都是拥有这个前缀的名字,于是哈希表就变成下面这样
ds['鲁']=['鲁塔弗','鲁冰花','鲁智深','鲁大师']
ds['lu']=['鲁塔弗','鲁冰花','鲁智深','鲁大师']
剩下的事情,就简单了,开发一个web应用,用户的request的参数就是用户当前的输入,然后在这个hash表里面查询,得到结果列表之后,用json encode之,render给用户即可
我当时的做法就是用web.py开发这个服务,hash表直接用的dbhash,用fastcgi的方式部署在nginx后面,非常简单
auto complete功能确实和用什么技术存储无关
这个项目的绝大部分代码都是用python开发的,为了降低维护难度,后来我要求一个菜鸟程序员把这个代码转换成php,存储直接用mysql就行
udpate
2013年,用nodejs重新做了一个智能提示 http://lutaf.com/223.htm
如何开发auto complete 智能提示功能的更多相关文章
- 一个.net程序员的安卓之旅-Eclipse设置代码智能提示功能
一个.net程序员的安卓之旅-代码智能提示功能 过完年回来就决心开始学安卓开发,就网上买了个内存条加在笔记本上(因为笔记本原来2G内存太卡了,装了vs2010.SQL Server 2008.orac ...
- 通过Typings为Visual Studio Code增强智能提示功能
缘起 最近在学习Node.js及ThinkJS这个框架,用vscode作为开发环境.默认情况下vscode对ThinkJS的代码提示并不好,所以研究了一下,原来可以同通过Typings来让vscode ...
- Eclipse for android 实现代码自动提示智能提示功能
Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...
- 关闭visual studio code 智能提示功能
对于程序初学者来说,应该少用IDE的提示功能,因为这样有助于记住一些常用的函数等功能.这也是为什么戏称喜欢用notepad++(windows)或者vim编辑器(Linux)来开发代码是大神的原因,而 ...
- 兼容IE8以下浏览器input表单属性placeholder不能智能提示功能
当前很多表单提示使用了表单属性placeholder,可这属性不兼容IE8以下的浏览器,我自己写了一个兼容处理js // 兼容IE8以下浏览器input不能智能提示功能 if(navigator.ap ...
- Visual Studio Code 使用 Typings 实现智能提示功能
前言 我们知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也有一些简单的提示,但这是通过代码片段提供的.功能上远不能和IDE相比.不过最近兴起的文本编辑器的新锐 Visual Studio ...
- Visual Studio 2012 智能提示功能消失解决办法
安装为Visual Studio 2012且更新到了Update3,但是发现智能提示功能用不了,查了一下,网上各种资料,重装VS,连重装系统的都有.不过有很多朋友都是使用命令行重置VS的方法解决了这个 ...
- Visual Studio 2013 智能提示功能消失解决办法
Visual Studio 2013中,智能提示功能突然用不了,查了一下,使用命令行重置VS的方法解决了这个问题.步骤如下: 开始菜单 -->所有程序-->Visual Studio 20 ...
- vi代码智能提示功能及相关配置
vim是一款支持插件.功能无比强大的编辑器,无论你的系统是linux.unix.mac还是windows,都能够选择他来编辑文件或是进行工程级别 的coding.如果能把vim用好了,不仅编程效率能得 ...
随机推荐
- Codeforces 468D Tree
题目 给出一棵带边权的树,求一个排列\(p\),使得\(\sum_{i=1}^{n}{dis(i, p_i)}\)的值最大,其中\(dis(v, u)\)表示\(v\)到\(u\)的距离. 算法 这题 ...
- ActiveMQ持久化方式(转)
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息 中心重新启动后仍然可以将消息发送出去,如果把这种持久化 ...
- encode_utf8 把字符编码成字节 微信例子
##µ¼Èë encode_json decode_json use JSON qw/encode_json decode_json/; print "1111111111111111-\$ ...
- Linux中TCP wrapper的使用
Linux中TCP wrapper的使用 tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念: 服务监听的两种方式: listen ...
- 略懂 MySQL字符集
本文虽说旨在明白.但若略懂亦可.毕竟诸葛孔明如是 只有基于字符的值才有所谓字符集的概念 某些字符集可能需要更多CPU.消费更多的内存和磁盘空间.甚至影响索引使用 这还不包括令人 ...
- jquery 获取 TABLE单元格的值
1.JQ部分: var tds = $("#table1 td"); tds.click(function(){ //给所有td添加点击事件 var tdSeq = ...
- PHP之验证码代码
<?php session_start(); $checkcode=""; /*for($i=0;$i<4;$i++) { $checkcode.=dechex(ran ...
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
最近入了nodejs的坑,作为老码农,js对我来说还是很容易的.webstorm虽说用得不多,但是pycharms我是老手了,idea的东西一脉相承,想想也就那样了. 但是自从看了某个视频后,觉得毕竟 ...
- 深入浅出Hadoop Mahout数据挖掘实战(算法分析、项目实战、中文分词技术)
Mahout简介 Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目, 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建 ...
- androidstudio 优化gradle编译效率
androidstuido 使用gradle自己主动构建和编译.有时做少量改动编译须要等待时间过长,近期Erik Hellman编写的Boosting the performance for Grad ...