乙個未經處理的資料庫中,一般是以文件id作為索引,文件內容作為記錄例如:而倒排索引指的是,將單詞或記錄作為索引,將文件id作為記錄,這樣便可以方便地通過索引來查詢到其所在的文件
流程:將資料庫中的結構化資料資料轉換為非結構化資料
然後將非結構化資料轉化為分詞結構
配置與使用:
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'
# 檔名必須是 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()
templates/search/indexes/course/course_text.txt
建立檔案路徑命名必須這個規範:templates/search/indexes/應用名稱/模型類名稱 text.txt
}
} }
# 更換 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
倒排索引與全文檢索
乙個未經處理的資料庫中,一般是以文件id作為索引,文件內容作為記錄 而倒排索引指的是,將單詞或記錄作為索引,將文件id作為記錄,這樣便可以方便地通過索引來查詢到其所在的文件 例如 流程 將資料庫中的結構化資料資料轉換為非結構化資料 然後將非結構化資料轉化為分詞結構 配置與使用 syl setting...
全文檢索技術 倒排索引演算法
索引在生活中存在方方面面的應用。比如你去超市,超市把商品分了不同的區間,日用平 生鮮 糧油 飲料等等,比如你去買可樂,直接去立著飲料牌子的區間去找就可以,不用去挨著尋找,那這裡的 牌子 就是索引。再以字典為例,要找 趙 這個字的詳細解釋,你不需要捧著厚厚的字典從頭到尾找,只要翻到z字母所在區間去找就...
全文檢索和倒排索引原理講解
正排表是以文件的id為關鍵字,表中記錄文件中每個字的位置資訊,查詢時掃瞄表中每個文件中字的資訊直到找出所有包含查詢關鍵字的文件。正排表結構如圖1所示,這種組織方法在建立索引的時候結構比較簡單,建立比較方便且易於維護 因為索引是基於文件建立的,若是有新的文件加入,直接為該文件建立乙個新的索引塊,掛接在...