Whooshalchemyplus 加 jieba 实现flask支持中文全文搜索
来源:互联网 发布:com顶级域名注册局 编辑:程序博客网 时间:2024/03/29 09:10
首先flask支持全文搜索的模块目前用的比较多的只有whooshalchemy以及whooshalchemyplus两个,不过都仅仅支持英文全文搜索,中文的话需要先进行分词处理,然后才能够使用whooshalchemyplus搜到,而中文分词在pyhton中莫过于jieba(做最好的 Python 中文分词组件)。
最近使用flask建站时,一直找不到有效的中文全文搜索方法,网上这方面的资料也比较少,并且有效的就更捉急了,参考了网上的一些说法加上自己的摸索,最终找到了行之有效的实现方式,现在记录下来。
一、安装
pip install flask_whooshalchemypluspip install jieba
flask_whooshalchemyplus资料: https://pypi.python.org/pypi/Flask-WhooshAlchemyPlus/0.7.5
jieba资料: https://pypi.python.org/pypi/jieba/
二、使用
1.(app/__init__.py初始化文件)
(1). 导入flask_whooshalchemyplus用来建立搜索
import flask_whooshalchemyplus
(2).然后在工厂函数create_app中进行初始化app, 即
flask_whooshalchemyplus.init_app(app)
2.(app/models.py模板文件)
导入 jieba, 用来中文分词
from jieba.analyse.analyzer import ChineseAnalyzer
在Post类中添加:
__searchable__ = ['body', 'title'] __analyzer__ = ChineseAnalyzer()以便进行文章标题及内容的修改。
3.(app/main/view.py视图文件)
(1). 在视图函数index()中判断是否有表单提交中最后添加:
flask_whooshalchemyplus.index_one_model(Post)用来将每一次的提交加入索引
(2). 新添加两个路由函数:(搜索及搜索结果)
@main.route('/search', methods = ['POST'])def search(): if not request.form['search']: return redirect(url_for('.index')) return redirect(url_for('.search_results', query = request.form['search']))@main.route('/search_results/<query>')def search_results(query): results = Post.query.whoosh_search(query).all() return render_template('search_results.html', query = query, results = results)
4. (前端)
(1). 在base.html的导航栏中添加搜索框:
<div class="col-lg-4"> {% if current_user %} <form class="navbar-form navbar-left" action="{{url_for('main.search')}}" method="POST"> <div class="form-group"> <input type="text" class="form-control" placeholder="站内搜索" name="search" > </div> <button type="submit" class="btn btn-default">搜索</button> </form> {% endif %} </div>
(2). search_results.html文件
{% extends "base.html" %}{% block title %}Searching{% endblock %}{% block page_content %}<div class="page-header"> <h1>搜索关键词: "{{query}}"</h1></div><ul class="posts"> {% for post in results %} <li class="post"> <div class="post-content"> <div class="post-date">{{ moment(post.timestamp).fromNow() }}</div> <div class="post-author"><a href="{{ url_for('.user', username=post.author.username) }}">{{ post.author.username }}</a></div> <div class="post-body"> {% if post.body_html %} {{ post.body_html | safe }} {% else %} {{ post.body }} {% endif %} </div> <div class="post-footer"> <a href="{{ url_for('.post', id=post.id) }}"> <span class="label label-success">详情</span> </a> <a href="{{ url_for('.post', id=post.id) }}#comments"> <span class="label label-primary">{{ post.comments.count() }} 评论</span> </a> </div> </div> </li> {% endfor %}</ul>{% endblock %}到这里基本已经完成了。
三、效果
1. 页面:搜索框
2.中文搜索结果
最后,记录一下,学东西还是要多探索,多思考。
阅读全文
2 0
- Whooshalchemyplus 加 jieba 实现flask支持中文全文搜索
- [转载]MySQL 全文搜索中文支持
- 基于Python flask全文搜索
- Django-haystack框架结合中文jieba分词和英文whoosh引擎实现全文检索功能
- MySQL 全文搜索支持
- MySQL 全文搜索支持
- Spring Data Elasticsearch加Elasticsearch服务实现全文搜索
- Sphinx+Mysql+中文分词安装-实现中文全文搜索
- Sphinx+Mysql+中文分词安装-实现中文全文搜索
- 使用 flask_whooshalchemyplus jieba 为 Flask 添加 搜索 功能
- MySQL 中文全文搜索
- mysql中文全文搜索
- ORACLE全文搜索中文
- Solr实现全文搜索
- flask入门的教程-全文搜索 Full Text Search
- Lucene.net 实现全文搜索
- Lucene.net实现全文搜索
- Lucene.net实现全文搜索
- [机器学习入门] 李宏毅机器学习笔记-33 (Recurrent Neural Network part 2;循环神经网络 part 2)
- CSS3盒模型的有关属性
- hdu 3853(期望dp)
- B
- 对傅里叶变换的理解
- Whooshalchemyplus 加 jieba 实现flask支持中文全文搜索
- 29. Divide Two Integers/49. Group Anagrams/96. Unique Binary Search Trees/560. Subarray Sum Equals K
- HDU5785Hints of sd0061
- Shell字符串比较相等、不相等方法小结
- Linux /etc/passwd文件
- iOS开发- 支付宝2017.7.28为止最新SDK引入后直接报错和AL138173
- 云掌财经对话新三板专题论坛7月30隆重举办
- [PAT乙级]1066. 图像过滤(15)
- 优秀的jquery插件