因为需要用到全文搜索,所以用了 Flask-WhooshAlchemy ,按照外国 blog 的说明完成了配置,然后尝试检索,但是只有检索英文的时候才有效,如果检索的关键字是中文就会返回空数组的结果了。
所以想请问一下有什么方法能解决么?
1
toono OP 手动顶置~
|
2
neo1218 2016-04-26 21:58:40 +08:00 1
是的, flask-whooshalchemy 内置的分词中文分词不行。建议使用 jieba 分词先创建分词表,然后再用 flask-whooshalchemy 对分词表进行关键字搜索。
|
3
toono OP @neo1218
我后来也查到大概要用 jieba 来进行分词了,但是我不确定是不是只要添加一个 analyzer 的字段就好了,应该是会自动分词吧? 这是我 model 的代码: ```python class Post(db.Model): __tablename__ = 'posts' __searchable__ = ['title'] # these fields will be indexed by whoosh __analyzer__ = ChineseAnalyzer() ``` 但是我这样子设置之后还是不能进行中文搜索,纯英文的搜索是没问题的。 求老司机再给点提示*・゜゚・*:.。..。.:*・'(*゚▽゚*)'・*:.。. .。.:*・゜゚・* |
4
toono OP 真心希望有解答,再次手动, sorry
|
5
toono OP 算是解决了,不过我只是基础使用,并没有深究。下面说说怎么做。
我先说说困难。 1. 原版的 Flask-WhooshAlchemy 并没有支持 python3 ,所以用 py3 的同学不能够通过 pip 直接安装使用。 2. 后来找到了 miguelgrinberg 的修改版,可以在 python3 上使用,但是在用了 jieba 分词系统的情况下还是不能够支持中文全文搜索。 3. 再后来找到了修改版 Flask-WhooshAlchemyPlus ,但是 README 文档上的步骤教程几乎完全参照原版文档,在我的情况下并不能正常使用。 接下来直接上步骤简要说明: 1. 安装 Flask-WhooshAlchemyPlus ,地址在 https://github.com/Revolution1/Flask-WhooshAlchemyPlus 2. 参照 miguelgrinberg 的文章进行设置 http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-full-text-search 这样子新的数据库 commit 都会被记录加入 whoosh 的索引中,也就是设置好 whoosh 之后 commit 的记录才能够被检索到。 |
6
toono OP 还有点比较重要,在配置好全文检索之后加入的记录才回创建搜索索引,也就是配置好之后的新记录才能被搜索。
|
11
boyxy120 2016-12-03 10:52:38 +08:00
@revol 运行的时候报错了
Traceback (most recent call last): File "app.py", line 28, in <module> flask_whooshalchemyplus.init_app(app) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Flask_WhooshAlchemyPlus-0.7.5-py3.4.egg/flask_whooshalchemyplus.py", line 423, in init_app whoosh_index_all(app) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Flask_WhooshAlchemyPlus-0.7.5-py3.4.egg/flask_whooshalchemyplus.py", line 372, in whoosh_index_all 'sqlalchemy'].db.Model._decl_class_registry.values() KeyError: 'sqlalchemy' zxiaobaideMacBook-Air:biaojiepay_shop zxiaobai$ python3 app.py server Traceback (most recent call last): File "app.py", line 29, in <module> flask_whooshalchemyplus.init_app(app) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Flask_WhooshAlchemyPlus-0.7.5-py3.4.egg/flask_whooshalchemyplus.py", line 423, in init_app whoosh_index_all(app) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Flask_WhooshAlchemyPlus-0.7.5-py3.4.egg/flask_whooshalchemyplus.py", line 372, in whoosh_index_all 'sqlalchemy'].db.Model._decl_class_registry.values() KeyError: 'sqlalchemy' 而且安装的时候提示依赖那个文件必须为 str or list 我把安装依赖的程序删了才装上 |
12
revol 2016-12-04 18:05:35 +08:00
|
13
zhze93 2016-12-22 16:34:13 +08:00
@revol 您好,使用您的 whooshalchemyplus+ChineseAnalyzer ,无法进行非中文全文搜索
这是我的配置工厂函数中: import flask_whooshalchemyplus flask_whooshalchemyplus.init_app(app) 模型中: __searchable__=['body'] __analyzer__ = ChineseAnalyzer() __tablename__='posts' 能进行英文的正确搜索,以及中文的全文搜索,比如“天气好,开心”,搜索“天气好”能搜到,搜“天气”不行。 也重置了数据库。( SQLite ) 同您请教,配置哪里需要修改? |
17
bushiwodeQQ 2017-05-27 13:35:19 +08:00
调用 whoosh_search 方法查 Post.query.whoosh_search('mus').all()
查到的结果: E:Python27libsite-packagessqlalchemysqlelements.py:4230: SAWarning: Textual SQL expression 'null' should be explicitly declared as text('null') (this warning may be suppressed after 10 occurrences) {"expr": util.ellipses_string(element)}) [] 我查的字段 searchable = ['title']; 我数据库 title 里面确实有 mus 这个词的 @revol 作者大大求指点 |