推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Eyon
V2EX  ›  Python

搜索下拉的解决方案

  •  
  •   Eyon · May 25, 2018 · 3652 views
    This topic created in 2936 days ago, the information mentioned may be changed or developed.

    初学者,找不到比较好的资料,如果方便的话给我说下比较简单易行的方案即可。

    比如数据库某表的 name 字段中分别有: 张晓明 李晓明 王晓明 赵晓明 杨晓明 ......

    在 HTML 前台页有个表单,用户输入“晓”或者“明”或者“晓明”,能够在即时弹出的下拉菜单中显示包含该关键字的 name 列表。这个 name 列表必须来自数据库(假设数据库有上千万条信息,缓存应该不行。)

    比较简单易行的方案是什么?

    效果类似于:

    11 replies    2018-05-27 10:35:43 +08:00
    qiayue
        1
    qiayue  
    PRO
       May 25, 2018
    上 Elasticsearch 吧

    或者自己实现的思路:
    1、对 name 所有数据分词,可以简单的按照长度分,比如 王小明 可以分为 王、小、明、王小、小明
    2、对所有分词以及对应拼音及拼音首字母做索引
    3、收到搜索请求,直接把输入的全部内容扔去找是否有对应的分词,找到索引,再找出 name 显示,每次显示 10 条足够
    4、前端有个小经验,因为我们使用的是中文输入法,所以可以使用定时器形式,每 200 毫秒查看一次输入框内容是否变化,改变则向后端请求,同时前端可以缓存结果
    Eyon
        2
    Eyon  
    OP
       May 25, 2018
    @qiayue 谢谢,对于初学者,有比较好的现成方案,绝不重复造轮子。
    opengps
        3
    opengps  
       May 25, 2018 via Android
    lusence
    dobelee
        4
    dobelee  
       May 26, 2018 via Android
    這個有維護一個關鍵詞詞庫。
    lusence 和 es 已經是很成熟的方案了,可做到你說的千萬級數據瞬間響應。還想怎樣?
    Actrace
        5
    Actrace  
       May 26, 2018
    用 sphinx 来做索引器,从 sphinx 抽取你需要的数据。
    swulling
        6
    swulling  
       May 26, 2018 via iPad
    别上来就是几千万。。你初学就按照几千条设计,数据库模糊匹配即可。
    mpich
        7
    mpich  
       May 26, 2018   ❤️ 1
    你要实现百度这种,用前缀树就好了。
    jingniao
        8
    jingniao  
       May 26, 2018 via Android
    数量级小(10w 以下)的话,前缀树放到内存中,查询速度杠杠的……
    再多就不行了,考虑 ngram 数据库索引或者 es 吧
    WilliamLin
        9
    WilliamLin  
       May 26, 2018 via Android
    数据量少,用数据库正则匹配,量大,那就上 lucene 这类的了
    jaylong
        10
    jaylong  
       May 26, 2018
    DigitalOcean 的 support 搜索下拉超级赞
    beggarvip
        11
    beggarvip  
       May 27, 2018 via Android
    @swulling 那还有学的必要吗?根本没应用场景啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5870 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 06:21 · PVG 14:21 · LAX 23:21 · JFK 02:21
    ♥ Do have faith in what you're doing.