課程全文檢索介面

2021-10-24 20:50:45 字數 4241 閱讀 9577

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...

什麼叫全文檢索 全文檢索概念

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...

什麼叫全文檢索 全文檢索概念

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...