目录(?)[+]

如何开发auto complete 智能提示功能

最近网上好像流传用redis实现,其实智能提示和用什么存储关系不大 07年,我过一个类似的项目

我有几千个名字,随着用户在输入框中不断输入汉字或者拼音,用一个下拉列表提示它可能的输入项

下拉框,选中状态,自然是用js做,这里主要讲一下后端代码怎么实现,原理很简单

这就是一个倒排索引表,我们要做的工作,主要是准备这个索引表的数据, 假设我有一个名字

鲁塔夫

第一步,为这个名字生成拼音,把汉字和拼音都放在一个文本文件里面,一行放一条

鲁塔弗
 lutaf

第二步,用最大前序法切词,具体来说,就是吧 “鲁塔弗”--切成 3行


 鲁塔
 鲁塔弗

lutaf 这个拼音也一样的切成下面的形状

l
 lu
 lut
 luta
 lutaf

然后用一个hash表来装载这些切好的“字段”,每个key对应的value自然就是“鲁塔夫”

  1. ds={}

  2. ds['鲁']='鲁塔弗'

  3. ds['鲁塔']='鲁塔弗'

  4. ds['鲁塔夫']='鲁塔弗'

  5. ds['l']='鲁塔弗'

  6. ....

  7. 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 智能提示功能的更多相关文章

  1. 一个.net程序员的安卓之旅-Eclipse设置代码智能提示功能

    一个.net程序员的安卓之旅-代码智能提示功能 过完年回来就决心开始学安卓开发,就网上买了个内存条加在笔记本上(因为笔记本原来2G内存太卡了,装了vs2010.SQL Server 2008.orac ...

  2. 通过Typings为Visual Studio Code增强智能提示功能

    缘起 最近在学习Node.js及ThinkJS这个框架,用vscode作为开发环境.默认情况下vscode对ThinkJS的代码提示并不好,所以研究了一下,原来可以同通过Typings来让vscode ...

  3. Eclipse for android 实现代码自动提示智能提示功能

    Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...

  4. 关闭visual studio code 智能提示功能

    对于程序初学者来说,应该少用IDE的提示功能,因为这样有助于记住一些常用的函数等功能.这也是为什么戏称喜欢用notepad++(windows)或者vim编辑器(Linux)来开发代码是大神的原因,而 ...

  5. 兼容IE8以下浏览器input表单属性placeholder不能智能提示功能

    当前很多表单提示使用了表单属性placeholder,可这属性不兼容IE8以下的浏览器,我自己写了一个兼容处理js // 兼容IE8以下浏览器input不能智能提示功能 if(navigator.ap ...

  6. Visual Studio Code 使用 Typings 实现智能提示功能

    前言 我们知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也有一些简单的提示,但这是通过代码片段提供的.功能上远不能和IDE相比.不过最近兴起的文本编辑器的新锐 Visual Studio ...

  7. Visual Studio 2012 智能提示功能消失解决办法

    安装为Visual Studio 2012且更新到了Update3,但是发现智能提示功能用不了,查了一下,网上各种资料,重装VS,连重装系统的都有.不过有很多朋友都是使用命令行重置VS的方法解决了这个 ...

  8. Visual Studio 2013 智能提示功能消失解决办法

    Visual Studio 2013中,智能提示功能突然用不了,查了一下,使用命令行重置VS的方法解决了这个问题.步骤如下: 开始菜单 -->所有程序-->Visual Studio 20 ...

  9. vi代码智能提示功能及相关配置

    vim是一款支持插件.功能无比强大的编辑器,无论你的系统是linux.unix.mac还是windows,都能够选择他来编辑文件或是进行工程级别 的coding.如果能把vim用好了,不仅编程效率能得 ...

随机推荐

  1. Jquery progressbar通过Ajax请求获取后台进度演示

    项目源代码下载:http://download.csdn.net/detail/nuptboyzhb/6262253 1.简介 本文主要演示Jquery progressbar的进度条功能.js通过a ...

  2. itextSharp 使用模板(PdfTemplate)不规则分栏(ColumnText)

    public static void Main() { Document document = new Document(); BaseFont bf = BaseFont.createFont(Ba ...

  3. isotope/masonry 使用jQuery.sortable

    function goMasonry() { // if ($container.data('masonry') != undefined) { $container.isotope('destroy ...

  4. MongoDB使用手册

    一.安装包下载地址 http://www.mongodb.org/downloads 二.服务器端使用 LINUX版本: ①用tar -zxvf mongodb-linux-x86_64-1.2.4. ...

  5. jQuery.localStorage() - jQuery SDK API

    jQuery.localStorage() - jQuery SDK API jQuery.localStorage() From jQuery SDK API   Jump to: navigati ...

  6. lua中打印所以类型功能实现table嵌套table

    lua中打印所以类型功能实现 本人測试 number.string.bool.nil.table嵌套table.userdata没问题 共享一下有什么问题请拍砖 代码例如以下 cclog = func ...

  7. 【linux】内核编译

    原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http://blog.cs ...

  8. 【Demo 0006】Android 组件(Activity)

    本章学习要点:        1.  了解Activity基本概念;        2.  掌握Activity生命周期:        3.  掌握 Activity之间跳转:  

  9. SRM 583 Div Level Two:IDNumberVerification

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12610 这道题比较有意思,估计是中国人出的吧,以前都不知道身份 ...

  10. 由href return false 来看阻止默认事件

    很多时候我们都想阻止一个a ?link的href跳转. 1 <a onclick=” return false ;” href=”www. 360 .cn”>click</a> ...