前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flask whooshee实现全文搜索(flask 85)

flask whooshee实现全文搜索(flask 85)

作者头像
用户5760343
发布2019-08-21 16:54:57
1.6K0
发布2019-08-21 16:54:57
举报
文章被收录于专栏:sktjsktj

初始化

代码语言:javascript
复制
whooshee = Whooshee()
 def create_app():
 app = Flask(name)
 whooshee.init_app(app)
 return app

代码语言:javascript
复制
app = Flask(name)
 whooshee = Whooshee(app)

属性

Option Description WHOOSHEE_DIR The path for the whoosh index (defaults to whooshee) WHOOSHEE_MIN_STRING_LEN Min. characters for the search string (defaults to 3) WHOOSHEE_WRITER_TIMEOUT How long should whoosh try to acquire write lock? (defaults to 2) WHOOSHEE_MEMORY_STORAGE Use the memory as storage. Useful for tests. (defaults to False) WHOOSHEE_ENABLE_INDEXING Specify whether or not to actually do any operations with the Whoosh index (defaults to True

例子

db = SQLAlchemy()

we don't pass app, but call init_app in create_app below

代码语言:javascript
复制
whooshee = Whooshee()
def create_app():
 app = Flask(name)
代码语言:javascript
复制
db.init_app(app)
whooshee.init_app(app)
return app
代码语言:javascript
复制
@whooshee.register_model('text')
 class Article(db.Model):
 id = db.Column(db.Integer, primary_key=True)
 text = db.Column(db.UnicodeText)

例子

代码语言:javascript
复制
@whooshee.register_model('title', 'content')
 class Entry(db.Model):
 id = db.Column(db.Integer, primary_key=True)
 title = db.Column(db.String)
 content = db.Column(db.Text)

例子

代码语言:javascript
复制
from flask_sqlalchemy import SQLAlchemy
 from flask_whooshee import Whooshee, AbstractWhoosheer
class User(db.Model):
 id = db.Column(db.Integer, primary_key=True)
 name = db.Column(db.String)
you can still keep the model whoosheer

@whooshee.register_model('title', 'content') class Entry(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String) content = db.Column(db.Text) user = db.relationship(User, backref=db.backref('entries')) user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

例子

@whooshee.register_whoosheer class EntryUserWhoosheer(AbstractWhoosheer): # create schema, the unique attribute must be in form of # model.name.lower() + '_' + 'id' (name of model primary key) schema = whoosh.fields.Schema( entry_id = whoosh.fields.NUMERIC(stored=True, unique=True), user_id = whoosh.fields.NUMERIC(stored=True), username = whoosh.fields.TEXT(), title = whoosh.fields.TEXT(), content = whoosh.fields.TEXT())

代码语言:javascript
复制
# don't forget to list the included models
models = [Entry, User]

# create insert_* and update_* methods for all models
# if you have camel case names like FooBar,
# just lowercase them: insert_foobar, update_foobar
@classmethod
def update_user(cls, writer, user):
    pass  # TODO: update all users entries

@classmethod
def update_entry(cls, writer, entry):
    writer.update_document(entry_id=entry.id,
                           user_id=entry.user.id,
                           username=entry.user.name,
                           title=entry.title,
                           content=entry.content)

@classmethod
def insert_user(cls, writer, user):
    pass  # nothing, user doesn't have entries yet

@classmethod
def insert_entry(cls, writer, entry):
    writer.add_document(entry_id=entry.id,
                        user_id=entry.user.id,
                        username=entry.user.name,
                        title=entry.title,
                        content=entry.content)

@classmethod
def delete_user(cls, writer, user):
    pass  # TODO: delete all users entries

@classmethod
def delete_entry(cls, writer, entry):
    writer.delete_by_term('entry_id', entry.id)

搜索的写法

Entry.query. whooshee_search('chuck norris'). order_by(Entry.id.desc()). all()

联合搜索

Entry.query.join(User). whooshee_search('chuck norris'). order_by(Entry.id.desc()). all()

返回前25行

Entry.query.join(User). whooshee_search('chuck norris', order_by_relevance=25). all()

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初始化
  • 属性
  • 例子
  • we don't pass app, but call init_app in create_app below
  • 例子
  • 例子
  • 例子
  • 搜索的写法
  • 联合搜索
  • 返回前25行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档