zoukankan      html  css  js  c++  java
  • 如何开发auto complete 智能提示功能

     

    目录(?)[+]

    如何开发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


  • 相关阅读:
    bzoj1107: [POI2007]驾驶考试egz LIS+单调队列
    poj3134 Power Calculus 迭代加深搜索
    洛谷P3953 逛公园 记忆化搜索
    洛谷P3960 列队 splay
    bzoj1486: [HNOI2009]最小圈 分数规划
    SharePoint Add-in Model (App Model) 介绍 – 概念、托管方式、开发语言
    SharePoint Add-in Model 介绍
    Office Add-In 应用类型及平台支持
    使用 Napa 创建并调试一个 Office 内容应用 – Hello World
    Office Add-in Model 简介
  • 原文地址:https://www.cnblogs.com/timssd/p/5150086.html
Copyright © 2011-2022 走看看