課程全文檢索介面

2022-08-10 00:03:17 字數 4117 閱讀 4532

1.基本介紹

前後端不分離:https://

1.1 安裝

pip install drf-haystack # django的開源搜尋框架

pip install whoosh # 搜尋引擎

pip install jieba # 中文分詞jieba,由於whoosh自帶的是英文分詞,對中文的分詞支援

不是太好

1.2 什麼是haystack?

2.配置使用

2.1 syl/settings.py 全文檢索配置

'''

''''

haystack

', # haystack要放在應用的上面

]'''

2.模板路徑

'''templates =[,]

'''3.全文檢索配置

'''haystack_search_results_per_page = 15

# 搜尋出多條資料時需要分頁

haystack_connections =,

}# # es引擎

# haystack_connections =,

# }# 新增此項,當資料庫改變時,會自動更新索引,非常方便

haystack_signal_processor = '

haystack.signals.realtimesignalprocessor

'

2.2 在子應用下建立索引檔案

# 檔名必須是 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分詞中的中文分析器

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

2.5 課程全文檢索介面檢視函式

# 如果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 =[

path(

'search/

', course_index_search),

]

2.7 命令構建倒排索引

python manage.py rebuild_index
3.測試課程全文檢索

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

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

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

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

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