最近在尝试优化公众号绝对影迷的搜索功能,我自己想的是内存数据库,此外听给力同事的建议使用全文检索。
内存数据库的话,每次程序启动都要重新生成一个数据库,包含电影id和名字,使用select like速度上应该会有一定提升,但是没见过别人的数据。
全文检索,一搜,厉害了,sqlite3的数据库中全文检索用到的竟然有google的代码。但要加上全文检索,没那么容易!首先发现原来的系统下python3的全文检索对中文是没啥支持的,除非有空格,才知道把那句话分成几个分词。这种默认的检索对英文还是有点用,对中文没啥用,支持这个功能也只有fts4的icu zh中文分词功能,fts5默认也是没有的。搜到github上有国人人对fts5进行魔改,使用微信的icu中文框架,也使得fts5支持了中文分词,但是都是移动的项目,暂时也没法用到linux里面去。
想让sqlite3支持,那么要重新编译,重新编译后又发现python3找不到这个模块,发现要重新修改环境变量才行。
首先对于sqlite3的编译,我已经转载,http://brightguo.com/sqlite3-linux-compile/
而python3也要重新编译(这个块待实现,不编译看看是否可以)http://brightguo.com/python3-6-5-linux-compile/
但上面这个编译得修改下了,我贴出修改后的:
1 2 3 4 5 6 7 8 9 10 11 |
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz --no-check-certificate tar -vxf Python-3.6.5.tar.xz cd Python-3.6.5/ LD_RUN_PATH=/usr/local/lib ./configure --enable-optimizations LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" make -j8 make install |
此外为了要修改环境变量,为了使得每次修改都有效,我们这个改
vim /etc/profile
添加到最后一行:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
发现这么玩,没鸟用,还是要在supervisor设置里加上,如
1 |
environment=LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" |
参考文章:
http://linux48.com/2012-08-03-sqlite-source-upgrade.html
http://oi.0w0.io/2018/01/05/Ubuntu-16-04-Python3-配置SQLite3-的-icu-分词/