国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Python的Flask框架中實現全文搜索功能

2020-02-23 00:48:59
字體:
來源:轉載
供稿:網友

 全文檢索引擎入門

灰常不幸的是,關系型數據庫對全文檢索的支持沒有被標準化。不同的數據庫通過它們自己的方式來實現全文檢索,而且SQLAlchemy在全文檢索上也沒有提供一個好的抽象。

我們現在使用SQLite作為我們的數據庫,所以我們可以繞開SQLAlchemy而使用SQLite提供的工具來創建一個全文檢索索引。但這么做不怎么好,因為如果有一天我們換用別的數據庫,那么我們就得重寫另一個數據庫的全文檢索方法。

所以我們的方案是,我們將讓我們現有的數據庫處理常規數據,然后我們創建一個專門的數據庫來解決全文檢索。


只有很少的開源的全文檢索引擎。據我說知只有一個Whoosh提供了Flask的擴展,它是用Python語言寫的全文檢索引擎。使用純Python引擎的優點是它可以運行在任何有Python解釋器的地方。缺點就是它的搜索性能沒有達到用C或者C++寫的搜索引擎那么好。在我的腦子里理想的解決方案是有一個搜索引擎,它提供了Flask的擴展,能連接大多數數據庫,而且還要像Flask-SQLAlchemy那樣提供一個能自由使用大多數數據庫的方法,但現在貌似木有這樣的全文檢索引擎。Django的開發者有一個非常棒的,支持大多數全文檢索引擎的擴展,叫django-haystack。希望有一天某個家伙能為Flask提供一個相似的擴展。


但現在,我們將通過Whoosh實現我們自己的全文檢索。我們將使用Flask-WhooshAlchemy擴展,該擴展使得Whoosh數據庫和Flask-SQLAlchemy模塊結合起來。

如果你還沒在你的虛擬環境中安裝Flask-WhooshAlchemy擴展,馬上安裝它。

Windows用戶用以下命令安裝:
 
代碼如下:flask/Scripts/pip install Flask-WhooshAlchemy

其他用戶用以下命令安裝:

 
代碼如下:flask/bin/pip install Flask-WhooshAlchemy

配置

配置Flask-WhooshAlchemy灰常簡單。我們只需要告訴擴展全文檢索數據庫的名字即可(fileconfig.py):
 
WHOOSH_BASE = os.path.join(basedir, 'search.db')
修改模塊

在將Flask-WhooshAlchemy和Flask-SQLAlchemy結合起來時,我們需要在合適的模塊類(fileapp/models.py)指定哪些數據時需要被索引的:
 

from app import appimport flask.ext.whooshalchemy as whooshalchemy class Post(db.Model):  __searchable__ = ['body']   id = db.Column(db.Integer, primary_key = True)  body = db.Column(db.String(140))  timestamp = db.Column(db.DateTime)  user_id = db.Column(db.Integer, db.ForeignKey('user.id'))   def __repr__(self):    return '<Post %r>' % (self.text) whooshalchemy.whoosh_index(app, Post)

這個模塊有一個新的__searchable__字段,它是一個列表,包括了所有可以被當做搜索索引的數據庫字段。在我們的項目里我們只需要所有文章帖子的body字段。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长子县| 甘孜| 万荣县| 安平县| 商南县| 贺兰县| 凤台县| 景宁| 灌南县| 利川市| 广灵县| 威宁| 松潘县| 花垣县| 隆回县| 惠安县| 舞钢市| 莱阳市| 三原县| 鹤峰县| 澎湖县| 随州市| 长海县| 蒲城县| 沧源| 台前县| 临湘市| 呈贡县| 博湖县| 微山县| 遵义县| 高雄市| 鄂尔多斯市| 青铜峡市| 邳州市| 平陆县| 英山县| 天峨县| 长乐市| 兰州市| 健康|