Python whoosh 如何优化加速 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
lixuda
V2EX    Python

Python whoosh 如何优化加速

  •  
  •   lixuda 2020-09-04 11:32:13 +08:00 4284 次点击
    这是一个创建于 1931 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一次使用 whoosh 数据量 300 万条,索引后 1.5G 文件

    根据文档查询,时间经常需要 7 秒以上,问问大神如何加速优化下?感谢

     ix = open_dir("indexdir") with ix.searcher() as searcher: myquery = Term("subject", "关键词") results = searcher.search(myquery,limit=10) for result1 in results: print(dict(result1)) 
    22 条回复    2020-09-10 16:00:17 +08:00
    JasperYanky
        1
    JasperYanky  
       2020-09-04 11:37:11 +08:00
    上 es
    wzw
        2
    wzw  
       2020-09-04 14:23:22 +08:00 via iPhone
    我是自己写,全部放内存,用 fastapi
    lixuda
        3
    lixuda  
    OP
       2020-09-04 15:47:08 +08:00
    @wzw 能参考下吗?
    小白用户,放内存怎么写?
    wzw
        4
    wzw  
       2020-09-04 15:58:21 +08:00
    @lixuda #3 你看看 expiringdict 我这个方法也有不好的地方, 好的地方是 快!
    sylvos
        5
    sylvos  
       2020-09-04 17:01:57 +08:00 via iPhone
    expiringdict 怎么用,有多快
    lixuda
        6
    lixuda  
    OP
       2020-09-04 17:06:19 +08:00
    @wzw https://github.com/mailgun/expiringdict 这个?字典缓存?能否再详细点,非常感谢
    zhuangzhuang1988
        7
    zhuangzhuang1988  
       2020-09-04 17:10:16 +08:00
    pypy??
    whoosh 反正是纯 python 的.
    lixuda
        8
    lixuda  
    OP
       2020-09-04 17:25:25 +08:00
    @zhuangzhuang1988 主要是想确认,是我使用的不对,还是本来就是这么慢。
    nooper
        9
    nooper  
       2020-09-04 22:29:49 +08:00
    2016 那都不维护了,你用它干啥。
    lixuda
        10
    lixuda  
    OP
       2020-09-05 09:38:59 +08:00
    @nooper 图它简单方便
    nonduality
        11
    nonduality  
       2020-09-05 14:38:12 +08:00
    或许你可以看下 whoosh 的索引数据结构,然后把它改为使用 diskcache 或 redis 做缓存后端。
    nonduality
        12
    nonduality  
       2020-09-05 14:42:28 +08:00
    如果你在 Django 下使用 Whoosh,可以试下 Haystack (改起来应该很快),看是不是也这么慢,是否存在不恰当使用的地方。

    如果还是很慢,但又不喜欢 ES 太重,可以考虑用 Xapian 做引擎,不过它对中文分词的支持会有点麻烦,知道怎么搞的话麻烦告诉下我。
    lixuda
        13
    lixuda  
    OP
       2020-09-05 15:01:10 +08:00
    @nonduality 现在用 flask+whoosh,目前测试下来,20 万条在 1-3 秒,200 万,就 7 秒以上
    nonduality
        14
    nonduality  
       2020-09-05 15:04:58 +08:00
    @lixuda Whoosh 有个支持 GAE blobstore 的索引后端,原则上在它基础上改出一个支持 Diskcache 后端的的不太难( Diskcache 很不错,用磁盘做缓存,速度跟 redis 相当)
    nonduality
        15
    nonduality  
       2020-09-05 18:56:49 +08:00
    @lixuda 经过搜索,发现有篇文章「用 xapian 跟 mmseg 实现中文搜索」的方案很好

    Xapian 比 Whoosh 快 4 倍到 60 倍,上亿条数据几秒内就能搞定,建议你试试
    yucongo
        16
    yucongo  
       2020-09-06 21:28:02 +08:00 via Android
    elasticsearch 吧,秒搜,也就 1G 硬盘需求
    nonduality
        17
    nonduality  
       2020-09-07 12:07:25 +08:00
    我已经改好出来一个基于 xapian 的搜索引擎,速度确实快很多。
    lixuda
        18
    lixuda  
    OP
       2020-09-07 13:18:25 +08:00
    @nonduality 能否分享下?
    nonduality
        19
    nonduality  
       2020-09-07 13:40:22 +08:00
    @lixuda 我的是配合 django haystack 的 xapian 后端。你可以根据「用 xapian 跟 mmseg 实现中文搜索」这篇文章改,我用的是 jieba 分词,用起来还比较方便。
    mcds
        20
    mcds  
       2020-09-07 15:11:56 +08:00
    时间应该都花在 open_dir 上了吧?把它做成 web 服务常驻内存就好,我现在索引文件大概在 700m 左右,查询时间 0.1s 左右
    nonduality
        21
    nonduality  
       2020-09-10 14:04:03 +08:00
    经过初步测试,改用 Xapian 做后端,比用 Whoosh 做后端快 30 到 60 倍。从中也可以看到,尽管 Haystack 框架看起来很重,但其实不是性能瓶颈。
    lixuda
        22
    lixuda  
    OP
       2020-09-10 16:00:17 +08:00
    @nonduality 关键是 Xapian 性能比 whoosh 好,whoosh 毕竟是纯 py
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1273 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 17:12 PVG 01:12 LAX 09:12 JFK 12:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86