1.安裝全文檢索包
# 全文檢索框架 pip install django-haystack # 全文檢索引擎 pip install whoosh # 中文分詞框架 pip install jieba
heystack一些配置都是固定寫好的,需要注意下
2.配置全文檢索
-
1.安裝haystack應用
INSTALLED_APPS = ( ... 'haystack', )
-
2.在settings.py文件中配置搜索引擎
# 配置搜索引擎后端 HAYSTACK_CONNECTIONS = { 'default': { # 使用whoosh引擎:提示,如果不需要使用jieba框架實現分詞,就使用whoosh_backend 'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine', # 索引文件路徑 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), # 在項目目錄下創建文件夾 whoosh_index } } # 當添加、修改、刪除數據時,自動生成索引 HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
- 3.在要建立索引的表對應的應用下,創建
search_indexes.py
文件 -
-
-
定義商品索引類
GoodsSKUIndex()
,繼承自indexes.SearchIndex
和indexes.Indexable
-
from haystack import indexes
from .models import GoodsSKU
class GoodsSKUIndex(indexes.SearchIndex, indexes.Indexable):
# 定義字符類型的屬性,名稱固定為text
# document=True表示建立的索引數據存儲到文件中
# use_template=True表示通過模板指定表中的字段,用於查詢
text = indexes.CharField(document=True, use_template=True)# 針對哪張表進行查詢
def get_model(self):
return GoodsSKU# 針對哪些行進行查詢
def index_queryset(self, using=None):
return self.get_model().objects.filter(isDelete=False)
-
-
-
4.指定要建立索引的字段
-
在
templates
下面新建目錄search/indexes/應用名
- 比如
goods
應用中的GoodsSKU
模型類中的字段要建立索引文件夾:search/indexes/goods
-
在新建目錄下,創建
goodssku_text.txt
,並編輯要建立索引的字段,如下圖 -
templates/search/indexes/goods/goodssku_text_txt
- 比如
-
-
5.生成索引文件
- # 在終端運行, 提示是否要刪除原有信息, 輸入y
-
python manage.py rebuild_index
-
-
搜索表單處理
- 搜索地址:
/search/
- 搜索方法:
get
接收關鍵字:
q
- action="/search/" method="get" 文本框的name= "q" 為固定寫法
- 搜索地址:
配置搜索地址正則
import haystack.urls url(r'^search/', include(haystack.urls)),
測試搜索效果,接收結果
-
全文檢索結果:
- 搜索出結果后,haystack會把搜索出的結果傳遞給
templates/search
目錄下的search.html
- 對於
search.html
,我們需要自己建立該html文件,並定義自己的搜索結果頁面
- 搜索出結果后,haystack會把搜索出的結果傳遞給
-
傳遞的上下文包括:
- query:搜索關鍵字
- page:當前頁的page對象
- paginator:分頁paginator對象
- 提示:
settings.py
文件中設置HAYSTACK_SEARCH_RESULTS_PER_PAGE
- 通過
HAYSTACK_SEARCH_RESULTS_PER_PAGE
可以控制每頁顯示數量 - 每頁顯示一條數據:
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 1
-
search.html
編寫,類似商品列表頁面