2.配置應用
3. 測試課程全文檢索
前後端不分離:
pip install drf-haystack # django的開源搜尋框架
pip install whoosh # 搜尋引擎 pip
install jieba # 中文分詞jieba,由於whoosh自帶的是英文分詞,對中文的分詞支援 不是太好
[
'haystack'
,# haystack要放在應用的上面
]'''2.模板路徑 '''
templates =[,
]'''3.全文檢索配置''' haystack_search_results_per_page =
15# 搜尋出多條資料時需要分頁
haystack_connections =
, }
# # es引擎
# haystack_connections = ,
# }
# 新增此項,當資料庫改變時,會自動更新索引,非常方便
haystack_signal_processor =
'haystack.signals.realtimesignalprocessor'
# 檔名必須是 search_indexes.py
from haystack import indexes
from
.models import course
# 修改此處,類名為模型類的名稱+index,比如模型類為goodsinfo,則這裡類名為goodsinfoindex(其 實可以隨便寫)
class
courseindex
(indexes.searchindex, indexes.indexable)
:"""
course索引類
"""# text為索引字段
# document = true,這代表haystack和搜尋引擎將使用此字段的內容作為索引進行檢索
# use_template=true 指定根據表中的那些字段建立索引檔案的說明放在乙個檔案中
text = indexes.charfield(document=
true
, use_template=
true
)# 對那張表進行查詢
defget_model
(self)
:# 過載get_model方法,必須要有
"""返回建立索引的模型類"""
return course # 返回這個model
# 建立索引的資料
defindex_queryset
(self, using=
none):
"""返回要建立索引的資料查詢集"""
# 這個方法返回什麼內容,最終就會對那些方法建立索引,這裡是對所有字段建立索引
return self.get_model(
).objects.
all(
)
}
} }
# 更換 text 欄位的 分析方式, 變為jieba分詞中的中文分析器
from haystack.backends.whoosh_backend import whooshengine, whooshsearchbackend
from whoosh.fields import text
from jieba.analyse import chineseanalyzer
class
mywhooshsearchbackend
(whooshsearchbackend)
:def
build_schema
(self, fields)
:(content_field_name, schema)
=super()
.build_schema(fields)
# 指定whoosh使用jieba進行分詞
# 如果settings.py中配置就是用settings中配置的,否則就每頁15條
results_per_page =
getattr
(settings,
'haystack_search_results_per_page',15
)def
course_index_search
(request)
:
query = request.get.get(
'q',
none
)
page =
int(request.get.get(
'page',1
))# 第幾頁
page_size =
int(request.get.get(
'page_size'
, results_per_page)
)#每頁多少條
if query:
form = modelsearchform(request.get, load_all=
true
)# 將查詢條件傳遞給查詢對 象
if form.is_valid(
):
results = form.search(
)# 查詢出來的最終資料
else
:
results =
else
:return jsonresponse(
)# 對結果集進行分頁
paginator = paginator(results, page_size)
try:
page = paginator.page(page)
# 從分好的頁中拿第幾頁
except invalidpage:
# 如果分頁出錯
return jsonresponse(
)
jsondata =
for result in page.object_list:
# 分頁後的課程查詢結果
data =
result =
}return jsonresponse(result)
urlpatterns =
[
path(
'search/'
, course_index_search)
,]
python manage.py rebuild_index
入門&page=1&page_size=1
]}
}
課程全文檢索介面
1.基本介紹 前後端不分離 https 1.1 安裝 pip install drf haystack django的開源搜尋框架 pip install whoosh 搜尋引擎 pip install jieba 中文分詞jieba,由於whoosh自帶的是英文分詞,對中文的分詞支援 不是太好 1...
什麼叫全文檢索 全文檢索概念
全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...
什麼叫全文檢索 全文檢索概念
全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...