Skip to main content

Flask/SQLAlchemy 的 Whoosh 扩展

项目描述

欢迎来到 Flask-WhooshAlchemy!
===============================

[![构建状态](https://travis-ci.org/dhamaniasad/ Flask-WhooshAlchemy.svg?branch=master)](https://travis-ci.org/dhamaniasad/Flask-WhooshAlchemy) [![image](https://circleci.com/gh/dhamaniasad/Flask-WhooshAlchemy/ tree/master.svg?style=shield)](https://circleci.com/gh/dhamaniasad/Flask-WhooshAlchemy/tree/master) [![image](https://img.shields.io/pypi/ v/Flask-WhooshAlchemy-Redux.svg)](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)
```

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

Flask-WhooshAlchemy-Redux-0.7.1.tar.gz (9.5 kB 查看哈希

已上传 source