简介

本文介绍如何在flask框架中实现中文全文搜索,本博客也已经支持中文全文搜索,欢迎在导航栏输入框中输入“tensorflow”、“算法”等关键词进行尝试。

依赖模块

  • jieba
  • whooshalchemyplus

安装依赖

pip install jieba
pip install flask_whooshalchemyplus  

起始文件

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 配置 sqlalchemy  数据库驱动://数据库用户名:密码@主机地址:端口/数据库?编码
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:passwd@localhost:3306/blog?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# set the location for the whoosh index
app.config['WHOOSH_BASE'] = 'path/to/whoosh/base'

# 初始化
db = SQLAlchemy(app)

model文件

from jieba.analyse.analyzer import ChineseAnalyzer
import flask_whooshalchemyplus


class BlogPost(db.Model):
  __tablename__ = 'blogpost'
  __searchable__ = ['title', 'content']  # these fields will be indexed by whoosh
  __analyzer__ = ChineseAnalyzer()        # configure analyzer; defaults to
                                         # StemmingAnalyzer if not specified

  id = app.db.Column(app.db.Integer, primary_key=True)
  title = app.db.Column(app.db.Unicode)  # Indexed fields are either String,
  content = app.db.Column(app.db.Text)   # Unicode, or Text
  created = db.Column(db.DateTime, default=datetime.datetime.utcnow)

flask_whooshalchemyplus.init_app(app)    # initialize

建立索引

旧博客批量建索引

from flask_whooshalchemyplus import index_all
index_all(app)

新博客单独建索引

db.session.add(BlogPost(title='My cool title', content='This is the first post.'))
db.session.commit()

开始搜索

results = BlogPost.query.whoosh_search(query).all()

参考