第一次使用 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))
        
|      1JasperYanky      2020-09-04 11:37:11 +08:00 上 es | 
|  |      2wzw      2020-09-04 14:23:22 +08:00 via iPhone 我是自己写,全部放内存,用 fastapi | 
|      5sylvos      2020-09-04 17:01:57 +08:00 via iPhone expiringdict 怎么用,有多快 | 
|  |      6lixuda OP @wzw https://github.com/mailgun/expiringdict  这个?字典缓存?能否再详细点,非常感谢 | 
|  |      7zhuangzhuang1988      2020-09-04 17:10:16 +08:00 pypy?? whoosh 反正是纯 python 的. | 
|  |      8lixuda OP @zhuangzhuang1988 主要是想确认,是我使用的不对,还是本来就是这么慢。 | 
|  |      9nooper      2020-09-04 22:29:49 +08:00 2016 那都不维护了,你用它干啥。 | 
|  |      11nonduality      2020-09-05 14:38:12 +08:00 或许你可以看下 whoosh 的索引数据结构,然后把它改为使用 diskcache 或 redis 做缓存后端。 | 
|  |      12nonduality      2020-09-05 14:42:28 +08:00 如果你在 Django 下使用 Whoosh,可以试下 Haystack (改起来应该很快),看是不是也这么慢,是否存在不恰当使用的地方。 如果还是很慢,但又不喜欢 ES 太重,可以考虑用 Xapian 做引擎,不过它对中文分词的支持会有点麻烦,知道怎么搞的话麻烦告诉下我。 | 
|  |      13lixuda OP @nonduality 现在用 flask+whoosh,目前测试下来,20 万条在 1-3 秒,200 万,就 7 秒以上 | 
|  |      14nonduality      2020-09-05 15:04:58 +08:00 @lixuda Whoosh 有个支持 GAE blobstore 的索引后端,原则上在它基础上改出一个支持 Diskcache 后端的的不太难( Diskcache 很不错,用磁盘做缓存,速度跟 redis 相当) | 
|  |      15nonduality      2020-09-05 18:56:49 +08:00 | 
|      16yucongo      2020-09-06 21:28:02 +08:00 via Android elasticsearch 吧,秒搜,也就 1G 硬盘需求 | 
|  |      17nonduality      2020-09-07 12:07:25 +08:00 我已经改好出来一个基于 xapian 的搜索引擎,速度确实快很多。 | 
|  |      18lixuda OP @nonduality 能否分享下? | 
|  |      19nonduality      2020-09-07 13:40:22 +08:00 @lixuda 我的是配合 django haystack 的 xapian 后端。你可以根据「用 xapian 跟 mmseg 实现中文搜索」这篇文章改,我用的是 jieba 分词,用起来还比较方便。 | 
|      20mcds      2020-09-07 15:11:56 +08:00 时间应该都花在 open_dir 上了吧?把它做成 web 服务常驻内存就好,我现在索引文件大概在 700m 左右,查询时间 0.1s 左右 | 
|  |      21nonduality      2020-09-10 14:04:03 +08:00 经过初步测试,改用 Xapian 做后端,比用 Whoosh 做后端快 30 到 60 倍。从中也可以看到,尽管 Haystack 框架看起来很重,但其实不是性能瓶颈。 | 
|  |      22lixuda OP @nonduality 关键是 Xapian 性能比 whoosh 好,whoosh 毕竟是纯 py |