當前位置:
首頁 > 知識 > Django 如何實現全文檢索?

Django 如何實現全文檢索?

作者:chenyvehtung原文:https://chenyvehtung.github.io/2015/09/11/django-haystack-search.html

背景介紹

本人在開發一個Django應用時,其中的一個需求是搜索功能,而Django本身並沒有自帶搜索模塊,所以必須自己實現。顯然,最簡單粗暴的方法就是,通過暴搜資料庫來查找接收到的文字輸入,當數據量相對大一點時,這種方法是很不可取的。本文將要介紹的這個方法是使用Django-haystack這個全文檢索框架結合Whoosh檢索引擎以及Jieba(結巴)中文分詞來實現的。

Whoosh是一個純python實現的全文搜索組件。Whoosh不但功能完善,還非常的快。

Haystack是一個第三方的app,專門用來為Django增加全文檢索功能,讓你可以方便地對model裡面的內容進行索引,搜索,簡化你的工作。並且Django-haystack設計為支持whoosh,solr,Xapian,Elasticsearc四種全文檢索引擎後端,屬於一種全文檢索的框架。

Jieba是一個Python中文分片語件,其包含多種功能,本文使用了其中的"ChineseAnalyzer for Whoosh搜索引擎"功能。

安裝依賴

具體實現前端建立搜索框(base.html)

添加URL(urls.py)

在 中,添加如下內容到

這樣,上一步驟中的action將會指向haystack.urls

建立模型(models.py)

我們將對此文章類中的title和text進行搜索

選定模型(search_indexes.py)

在models.py所在目錄下,新建search_indexes.py,用來確定我們將選定那個class來建立索引。

確定屬性(article_text.txt)

此步驟中,我們需要建立 ,並在其中指明我們需要對選定類中的哪些屬性進行索引。該文件所在的路徑應該是 。如本項目為: ,並在文件中寫入(請去除其中的"",由於模板語言衝突)

其中的 和 就是我們想要建立索引的文章標題和文章內容。

添加搜索引擎到項目中(whooshcnbackend.py)

由於whoosh搜索引擎無法對中文進行搜索,所以我們需要使用jieba分詞來作為whoosh的ChineseAnalyzer,這樣就必須對原有的代碼進行修改。考慮到安全性以及可移植性,我們可以把 拷貝到項目下再進行修改。

將 拷貝到 所在的目錄下,並將其重命名為 ,然後,在該文件中添加

找到

然後將其修改為

這樣,便成功地為whoosh引擎添加了jieba分詞

選定搜索引擎(settings.py)

我們需要在settings.py中添加haystack應用

指定haystack的搜索引擎為上一步驟中修改好的,集成了jieba分詞的 ,在 的末尾添加如下代碼

到此,整個搜索的配置工作就完成了。

建立索引(終端)

我們將建立索引,在終端中運行

成功後,便會在項目根目錄下增加一個 的目錄

索引自動更新(settings.py)

在 中加入

這樣,當我們成功新建一篇Article之後,伺服器便會自動更新索引,將該文章的標題和內容加入到索引中。

搜索結果顯示(search.html)

在 路徑下,新建 ,作為搜索結果的前端展示頁面。

限於篇幅,本處不貼代碼,需要的自行前往本項目Github地址中的/templates/search/search.html進行查看

其中的 是搜索之後的返回結果list,我們通過 來獲取我們所需要的屬性。如本例中,我們使用 來獲得返回的文章的標題。

至此,我們便成功地實現了基於django-haystack的全文搜索!

Debug相關對於Haystack

需要對Haystack進行Debug時,可以參考其官方鏈接: Debugging Haystack

對於Whoosh

如果要查看whoosh_index中是否有正確存入索引, 可以在Django的shell中( ),輸入以下語句

成功的話將會列印出已經建立的全部索引。

參考鏈接:

題圖:pexels,CC0 授權。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 編程派 的精彩文章:

Python 非同步教程:Asyncio
如何正確閱讀計算機科學書籍?
如何寫出優雅的 Docstring?
一步一步搭建視頻聚合網站
深入理解子進程

TAG:編程派 |

您可能感興趣

如何在 MacOS的Dropbox里Spotlight 全文檢索 epub 電子書
Creative Commons搜索引擎正式上線 可檢索超3億張圖片
Hibernate複習之Hibernate 檢索策略
Google AI地標檢索識別競賽雙料獲勝方案 | 飛槳PaddlePaddle開源
哈希檢索之Feature Learning based DPSH with Pairwise Labels
高擴展的靈活的檢索引擎 elaticsearch
J-Plat Pat檢索系統界面操作
OpenCV特徵提取與圖像檢索實現
16歲Kaggle老兵奪冠Kaggle地標檢索挑戰賽!
全能型 Markdown 應用 MWeb 3.0,讓我們可以更快速地記錄筆記和檢索文檔
解密美圖大規模多媒體數據檢索技術 DeepHash
Kaggle地標圖片檢索挑戰賽冠軍方案講解
Chrome擴展推薦:瀏覽器第二大腦,全文檢索已瀏覽過的網頁
Hbase資料庫檢索性能優化策略
《ProduceX101》「曹承衍」等成韓青少年實時檢索熱詞
Facebook擴大檢索漏洞範圍 重點看第三方平台
SCI檢索方法及SCI分區情況查看
GPDR條例和視頻檢索論文閱讀
韓國專利檢索系統之KIPRIS檢索系統
SIFT與CNN的碰撞:萬字長文回顧圖像檢索任務十年探索歷程