1.基本介紹
前後端不分離:https://1.1 安裝
pip install drf-haystack # django的開源搜尋框架1.2 什麼是haystack?pip install whoosh # 搜尋引擎
pip install jieba # 中文分詞jieba,由於whoosh自帶的是英文分詞,對中文的分詞支援
不是太好
2.配置使用
2.1 syl/settings.py 全文檢索配置
'''2.2 在子應用下建立索引檔案''''
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)
# 對那張表進行查詢
def get_model(self): # 過載get_model方法,必須要有
"""返回建立索引的模型類
"""return
course # 返回這個model
# 建立索引的資料
def index_queryset(self,
using=none):
"""返回要建立索引的資料查詢集
"""# 這個方法返回什麼內容,最終就會對那些方法建立索引,這裡是對所有字段建立索引
return self.get_model().objects.all()
2.3 指定索引模板檔案
}2.4 修改為jieba分詞中的中文分析器}}
# 更換 text 欄位的 分析方式, 變為jieba分詞中的中文分析器2.5 課程全文檢索介面檢視函式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進行分詞
schema._fields[
'text
'] = text(stored=true,
analyzer=chineseanalyzer(),
field_boost=fields.get('
text
').boost,
sortable=true)
return
(content_field_name, schema)
class
mywhooshengine(whooshengine):
backend = mywhooshsearchbackend
# 如果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)) #每頁多少條
ifquery:
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)
2.6 syl/urls.py 新增路由
urlpatterns =[2.7 命令構建倒排索引path(
'search/
', course_index_search),
]
python manage.py rebuild_index3.測試課程全文檢索
192.168.56.100:8888/search/?q=入門&page=1&page_size=1
課程全文檢索介面
2.配置應用 3.測試課程全文檢索 前後端不分離 pip install drf haystack django的開源搜尋框架 pip install whoosh 搜尋引擎 pip install jieba 中文分詞jieba,由於whoosh自帶的是英文分詞,對中文的分詞支援 不是太好 hay...
什麼叫全文檢索 全文檢索概念
全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...
什麼叫全文檢索 全文檢索概念
全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...