如何开发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用好了,不仅编程效率能得 ...
随机推荐
- css概述
前言 1.CSS cascading stylesheet 级联样式表 ,外观显示(页面内容显示的方式).CSS文档以.css作为后缀 2.w3c推荐页面文件定义 数据和结 ...
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- 百度地图api基本用法
首先 ,如果想调用百度地图api,你需要获取一个百度地图api的密钥. 申请密钥很简单,在百度地图api的首页就有相关链接,填写相关信息百度就会给你一个密钥了. 接下来,就是引入百度地图的api 关键 ...
- itextSharp 对pdf的每个页面添加footer/header
static void SetAllHeaderFooter(string inputPath) { PdfReader reader=new PdfReader(inputPath); PdfSta ...
- 【BOI2007】【BZOJ1176】Mokia
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MB Submit: 1059 Solved: 432 [Submit][St ...
- 怎样学习HTML5?
怎样学习HTML5?这个话题,问的人非常多,随便百度一下就能看到各种各样的回答.只是感觉每种回答都不给力.以下我给出一个自己理解的HTML5学习的路线图,依照这个路线图学习以后,一般的HTML5项目开 ...
- ASP.NET - 编写让别人能读懂的代码
http://www.cnblogs.com/richieyang/p/4840614.html
- AJAX实现类似百度的搜索提示,自动补全和键盘、鼠标操作
<script type="text/javascript"> $(document).ready(function(){ var highlightIndex = - ...
- CLR和.Net对象
CLR和.Net对象生存周期 前言 1. 基础概念明晰* 1.1 公告语言运行时* 1.2 托管模块* 1.3 对象和类型* 1.4 垃圾回收器 2. 垃圾回收模型* 2.1 为什么需要垃圾回收* 2 ...
- POJ3189_Steady Cow Assignment(二分图多重匹配/网络流+二分构图)
解题报告 http://blog.csdn.net/juncoder/article/details/38340447 题目传送门 题意: B个猪圈,N头猪.每头猪对每一个猪圈有一个惬意值.要求安排这 ...