前言
django是python語言的一個web框架,功能強大。配合一些插件可為web網站很方便地添加搜索功能。
搜索引擎使用whoosh,是一個純python實現的全文搜索引擎,小巧簡單。
中文搜索需要進行中文分詞,使用jieba。
直接在django項目中使用whoosh需要關注一些基礎細節問題,而通過haystack這一搜索框架,可以方便地在django中直接添加搜索功能,無需關注索引建立、搜索解析等細節問題。
haystack支持多種搜索引擎,不僅僅是whoosh,使用solr、elastic search等搜索,也可通過haystack,而且直接切換引擎即可,甚至無需修改搜索代碼。
配置搜索
1.安裝相關包
pip install django-haystackpip install whooshpip install jieba
2.配置django的settings
修改settings.py文件,添加haystack應用:
INSTALLED_APPS = ( ... 'haystack', #將haystack放在最后)
在settings中追加haystack的相關配置:
HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine', 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), }}# 添加此項,當數據庫改變時,會自動更新索引,非常方便HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'3.添加url
在整個項目的urls.py中,配置搜索功能的url路徑:
urlpatterns = [ ... url(r'^search/', include('haystack.urls')),]4.在應用目錄下,添加一個索引
在子應用的目錄下,創建一個名為 search_indexes.py 的文件。
from haystack import indexes# 修改此處,為你自己的modelfrom models import GoodsInfo# 修改此處,類名為模型類的名稱+Index,比如模型類為GoodsInfo,則這里類名為GoodsInfoIndexclass GoodsInfoIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) def get_model(self): # 修改此處,為你自己的model return GoodsInfo def index_queryset(self, using=None): return self.get_model().objects.all()
說明:
1)修改上文中三處注釋即可
2)此文件指定如何通過已有數據來建立索引。get_model處,直接將django中的model放過來,便可以直接完成索引啦,無需關注數據庫讀取、索引建立等細節。
3)text=indexes.CharField一句,指定了將模型類中的哪些字段建立索引,而use_template=True說明后續我們還要指定一個模板文件,告知具體是哪些字段
5.指定索引模板文件
在項目的“templates/search/indexes/應用名稱/”下創建“模型類名稱_text.txt”文件。
例如,上面的模型類名稱為GoodsInfo,則創建goodsinfo_text.txt(全小寫即可),此文件指定將模型中的哪些字段建立索引,寫入如下內容:(只修改中文,不要改掉object)
新聞熱點
疑難解答