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的碰撞:萬字長文回顧圖像檢索任務十年探索歷程