Django haystack實現全文搜尋

2021-09-27 12:57:17 字數 3146 閱讀 1115

搜尋可以使用最原始的like的方式進行搜尋。當然這種搜尋方式對於些小的資料是非常合適的。但是隨著資料越來越大。這時候我們就需要使用搜尋引擎了。搜尋引擎會將所有要搜尋的資料使用演算法做個素引,以後搜尋的時候就只需要根據這個索引腳找到相應的資料。搜尋引擎做索引的過程會比較慢,但是一旦索引建立完成,那麼以後再搜尋的時候就會很快了。

這個外掛程式是專門始django 提供搜尋功能的。django-haystack 提供了乙個搜尋的介面,底層可以根據自己的需求更換搜尋引擎。他

其實有點類似於django 中的orm外掛程式,提供了乙個運算元據庫的介面,但是底層具體使用哪個資料庫是可以自己設定的。安裝方式非常簡單,通過pip install djange-haystack即可安裝。

搜尋引擎:

django-haystack支援的搜尋引擎有solar、elasticsearch 、whoosh 、xapian 等。whoosh 是基於純python 的搜尋引擎,檢索速度快,整合方便。這裡我們就選擇whoosh來作為haystack 的搜尋引擎。安裝方式同樣也是通過pip安裝的: pip install whoosh

(1)在專案中安裝 djando-haystack

'haystack',

(2)設定搜尋引擎

在settings.py中新增以下配置

haystack_connections = 

}

(3)建立索引類

from haystack import indexes

from .models import news

class newsindex(indexes.searchindex, indexes.indexable):

text = indexes.charfield(document=true, use_template=true)

def get_model(self):

return news

def index_queryset(self, using=none):

return self.get_model().objects.all()

(4)新增url對映在主urls.py中

urlpatterns = [

path('search/', include('haystack.urls')),

(5)新增模板

在templates資料夾下建立一下目錄:

然後再news_text.txt中新增需要被索引的字段:}}

接著再templates資料夾下建立search.html模板檔案,haystack會自動在templates資料夾下尋找這個模板檔案進行渲染,並且會給這個模板檔案傳入 page, paginator, query等引數。其中page和paginator分別是django內建的page類和paginator類的物件,query是查詢的關鍵字,我們可以通過page.object_list獲取到result物件,再通過result.object 獲取到queryset物件

(6)建立索引

執行python manage.py rebuild_index

在site-packages資料夾下 找到whoosh_backend.py檔案, 將該檔案內容全部複製

再將第186行的:schema_fields[field_class.index_fieldname] = text(stored=true, analyzer=stemminganalyzer(), field_boost=field_class.boost, sortable=true)

修改為:schema_fields[field_class.index_fieldname] = text(stored=true, analyzer=chineseanalyzer(), field_boost=field_class.boost, sortable=true)

settings.py檔案中新增:

haystack_connections = 

}#增刪改查操作後自動更新索引

haystack_signal_processor = 'haystack.signals.realtimesignalprocessor'

django haystack實現全文檢索

haystack配置使用 前後端分離 索引檔案生成 替換成jieba分詞 索引檔案使用 1.haystack是django的開源搜尋框架,該框架支援solr,elasticsearch,whoosh,xapian 搜尋引擎,不用更 改 直接切換引擎,減少 量。2.搜尋引擎使用whoosh,這是乙個由...

django haystack外掛程式基本使用操作流程

搜尋可以使用最原始的模糊匹配的like方式進行搜尋。當然這種搜尋方式對於一些小量的資料是非常合適的。但是隨著資料量越來越大。這時候我們就需要使用搜尋引擎了。搜尋引擎會將所有需要搜尋的資料使用演算法做乙個索引,以後搜尋的時候就只需要根據這個索引即可找到相應的資料。搜尋引擎做索引的過程會比較慢,甚至占用...

Django haystack實現全文搜尋

原文 project project settings.py blog models.py 此models.py的內容假設如下 from django.db import models from django.contrib.auth.models import user class note mo...