Flask/SQLAlchemy 的 Whoosh 扩展
项目描述
欢迎来到 Flask-WhooshAlchemy!
===============================
[](https://travis-ci.org/dhamaniasad/Flask-WhooshAlchemy) [](https://circleci.com/gh/dhamaniasad/Flask-WhooshAlchemy/tree/master) [](https://pypi.python.org/pypi/Flask-WhooshAlchemy-Redux)
Flask-WhooshAlchemy 是一个集成了 [Whoosh](https) 的文本搜索功能的 Flask 扩展://bitbucket.org/mchaput/whoosh/wiki/Home) 和 [SQLAlchemy](http://www.sqlalchemy.org/) 的 ORM 用于 [Flask](http://flask.pocoo.org) /) 应用程序。
[GitHub](https://github.com/dhamaniasad/Flask-WhooshAlchemy) 上的源代码和问题跟踪。
查看官方文档 [这里](https://Flask-WhooshAlchemy.readthedocs.org/)。
安装
--------
pip install flask_whooshalchemy_redux
或者:
git clone https://github.com/dhamaniasad/Flask-WhooshAlchemy.git
Quickstart
----------
让我们设置环境并创建我们的模型:
```python
import flask.ext.whooshalchemy as whooshalchemy
# 设置 whoosh 索引的位置
app.config['WHOOSH_BASE'] = 'path/to/whoosh/base'
class BlogPost(db.Model):
__tablename__ = '博文'
__searchable__ = ['title', 'content'] # 这些字段将被 whoosh 索引
__analyzer__ = SimpleAnalyzer() # 配置分析器;默认为
# StemmingAnalyzer 如果未指定
id = app.db.Column(app.db.Integer, primary_key=True)
title = app.db.Column(app.db.Unicode) # 索引字段是 String,
content = app. db.Column(app.db.Text) # Unicode, or Text
created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
whooshalchemy.whoosh_index(app, BlogPost)
```
只需两步即可开始:
1) 将 `WHOOSH_BASE` 设置为 whoosh 索引的路径。如果未设置,它将默认为运行应用程序的目录中名为“whoosh\_index”的目录。
2) 向模型添加一个 `__searchable__` 字段,指定要索引的字段(如 `str` s)。
让我们创建一个帖子:
```python
db.session.add(
BlogPost(title='My cool title', content='This is the first post.')
); db.session.commit()
```
会话提交后,我们的新 `BlogPost` 被索引。同样,如果帖子被删除,它将从 Whoosh 索引中删除。
文本搜索
--------------
执行简单搜索:
```python
results = BlogPost.query.whoosh_search('cool')
```
这将返回所有 `BlogPost` 实例,其中至少一个索引
字段(即“标题”或“内容”)是与查询匹配的文本。结果
根据它们的相关性得分进行排名,
迭代时最好的匹配出现在第一位。此调用的结果是
sqlalchemy.orm.query.Query 对象的(子类),因此您可以链接其他 SQL
操作。例如:
```python
two_days_ago = datetime.date.today() - datetime.timedelta(2)
recent_matches = BlogPost.query.whoosh_search('first').filter(
BlogPost.created >= two_days_ago)
```
或者,以替代(可能更慢)顺序:
```python
recent_matches = BlogPost.query.filter(
BlogPost.created >= two_days_ago).whoosh_search('first')
```
我们可以限制结果:
```python
# 得到 2 个最好的结果:
results = BlogPost.query.whoosh_search('cool', limit=2)
` `
默认情况下,在所有索引字段上执行搜索作为 OR
连接。例如,如果模型的 'title' 和 'content' 指示
为 `__searchable__`,则将针对这两个字段检查查询,
返回其标题或内容与查询内容匹配的任何实例
。要指定要检查的特定字段,
请使用所需字段填充 `fields` 参数:
```python
results = BlogPost.query.whoosh_search('cool', fields=('title',
默认情况下,仅当结果包含所有查询词 (AND)时才会返回结果。要切换到 OR 分组,请将 `or_` 参数设置
为 `True`:
```python
results = BlogPost.query.whoosh_search('cool', or_=True)
```
===============================
[](https://travis-ci.org/dhamaniasad/Flask-WhooshAlchemy) [](https://circleci.com/gh/dhamaniasad/Flask-WhooshAlchemy/tree/master) [](https://pypi.python.org/pypi/Flask-WhooshAlchemy-Redux)
Flask-WhooshAlchemy 是一个集成了 [Whoosh](https) 的文本搜索功能的 Flask 扩展://bitbucket.org/mchaput/whoosh/wiki/Home) 和 [SQLAlchemy](http://www.sqlalchemy.org/) 的 ORM 用于 [Flask](http://flask.pocoo.org) /) 应用程序。
[GitHub](https://github.com/dhamaniasad/Flask-WhooshAlchemy) 上的源代码和问题跟踪。
查看官方文档 [这里](https://Flask-WhooshAlchemy.readthedocs.org/)。
安装
--------
pip install flask_whooshalchemy_redux
或者:
git clone https://github.com/dhamaniasad/Flask-WhooshAlchemy.git
Quickstart
----------
让我们设置环境并创建我们的模型:
```python
import flask.ext.whooshalchemy as whooshalchemy
# 设置 whoosh 索引的位置
app.config['WHOOSH_BASE'] = 'path/to/whoosh/base'
class BlogPost(db.Model):
__tablename__ = '博文'
__searchable__ = ['title', 'content'] # 这些字段将被 whoosh 索引
__analyzer__ = SimpleAnalyzer() # 配置分析器;默认为
# StemmingAnalyzer 如果未指定
id = app.db.Column(app.db.Integer, primary_key=True)
title = app.db.Column(app.db.Unicode) # 索引字段是 String,
content = app. db.Column(app.db.Text) # Unicode, or Text
created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
whooshalchemy.whoosh_index(app, BlogPost)
```
只需两步即可开始:
1) 将 `WHOOSH_BASE` 设置为 whoosh 索引的路径。如果未设置,它将默认为运行应用程序的目录中名为“whoosh\_index”的目录。
2) 向模型添加一个 `__searchable__` 字段,指定要索引的字段(如 `str` s)。
让我们创建一个帖子:
```python
db.session.add(
BlogPost(title='My cool title', content='This is the first post.')
); db.session.commit()
```
会话提交后,我们的新 `BlogPost` 被索引。同样,如果帖子被删除,它将从 Whoosh 索引中删除。
文本搜索
--------------
执行简单搜索:
```python
results = BlogPost.query.whoosh_search('cool')
```
这将返回所有 `BlogPost` 实例,其中至少一个索引
字段(即“标题”或“内容”)是与查询匹配的文本。结果
根据它们的相关性得分进行排名,
迭代时最好的匹配出现在第一位。此调用的结果是
sqlalchemy.orm.query.Query 对象的(子类),因此您可以链接其他 SQL
操作。例如:
```python
two_days_ago = datetime.date.today() - datetime.timedelta(2)
recent_matches = BlogPost.query.whoosh_search('first').filter(
BlogPost.created >= two_days_ago)
```
或者,以替代(可能更慢)顺序:
```python
recent_matches = BlogPost.query.filter(
BlogPost.created >= two_days_ago).whoosh_search('first')
```
我们可以限制结果:
```python
# 得到 2 个最好的结果:
results = BlogPost.query.whoosh_search('cool', limit=2)
` `
默认情况下,在所有索引字段上执行搜索作为 OR
连接。例如,如果模型的 'title' 和 'content' 指示
为 `__searchable__`,则将针对这两个字段检查查询,
返回其标题或内容与查询内容匹配的任何实例
。要指定要检查的特定字段,
请使用所需字段填充 `fields` 参数:
```python
results = BlogPost.query.whoosh_search('cool', fields=('title',
默认情况下,仅当结果包含所有查询词 (AND)时才会返回结果。要切换到 OR 分组,请将 `or_` 参数设置
为 `True`:
```python
results = BlogPost.query.whoosh_search('cool', or_=True)
```