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

2021-10-09 04:18:38 字數 4428 閱讀 1079

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

這個外掛程式是專門給django提供搜尋功能的。django-haystack提供了乙個搜尋的介面,底層可以根據自己的需求更換搜尋引擎。他其實有點類似於django中的orm外掛程式,提供了乙個運算元據庫的介面,但是底層具體使用哪個資料庫是可以自己設定的。

django-haystack支援的搜尋引擎有solr、elasticsearch、whoosh、xapian等。whoosh是基於純python的搜尋引擎,檢索速度快,整合方便。

pip3 install django-haystack

pip3 install whoosh

1.在專案中安裝django-haystack,在settings.py[

2'django.contrib.admin',3

'django.contrib.auth',4

'django.contrib.contenttypes',5

'django.contrib.sessions',6

'django.contrib.sites',7

8# 新增

9'haystack',10

]2.設定搜尋引擎,在settings中

1 haystack_connections =

8}

3.建立索引類
1

class

newsindex

(indexes.searchindex,indexes.indexable)

:2 text = indexes.charfield(document=

true

,use_template=

true)3

4def

get_model

(self):5

return news67

defindex_queryset

(self, using=

none):

8return self.get_model(

).objects.

all(

)

4.新增url對映

1 urlpatterns =

[2 path(

'',views.index,name=

'index'),

3# 新增search的url對映

4 path(

'search/'

,include(

'haystack.urls'))

,5 path(

'news/'

, include()),6]

5.新增模板在templates資料夾下建立以下結構的目錄:

1 templates

2 search

3 indexes

5 news(模型的名字)_text.txt

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

1

# 根據標題和內容文字2}

3}

緊接著templates檔案下建立search.html模板檔案,haystack會自動在templates檔案下尋找這個模板檔案渲染,並且會給這個模板傳入page/paginator/query等引數,django內建的分頁與查詢的關鍵字。我們可以通過page.object_list獲取到查詢出來的資料。

="recommend-list"

>

="thumbnail-group"

>

"#">

"}" alt=

"">

<

/a>

<

/div>

="news-group"

>

="title"

>

"#">

}<

/a>

<

/p>

="desc"

>

}<

/p>

="more"

>

="category"

>

}<

/span>

="pub-time"

>

}<

/span>

="author"

>

}<

/span>

<

/p>

<

/div>

<

/li>

<

/ul>6.建立索引

1 python manage.py rebuild_index

如果不想每次資料操作後都要手動的建立索引,可以在settings中配置:

1
# 增刪改查後自動建立索引

2 haystack_signal_processor =

'haystack.signals.realtimesignalprocessor'7.使用jieba分詞替換whoosh預設的分詞

whoosh預設是採用正規表示式進行分詞的,這對於英文詞彙適用,但是中文支援的不好,這裡替換為jieba分詞,jieba分詞庫對中文卻支援的好。  

安裝

1 pip3 install jieba

安裝完成後,拷貝d:\python\lib\sitepackages\haystack\backends\whoosh_backend.py其中的**,將他放在專案的其他包中,然後建立乙個名叫whoosh_cn_backend.py檔案,把剛剛複製的**貼上進去,然後再新增以下**:

1
import jieba

2from whoosh.analysis import tokenizer, token 34

class

chinesetokenizer

(tokenizer):5

def__call__

(self, value, positions=

false

, chars=

false

,6 keeporiginal=

false

, removestops=

true

,7 start_pos=

0, start_char=

0, mode='',

**kwargs)

:8 t = token(positions, chars, removestops=removestops, mode=mode,

9**kwargs)

10 seglist = jieba.cut(value, cut_all=

true)11

for w in seglist:

12 t.original = t.text = w

13 t.boost =

1.014

if positions:

15 t.pos = start_pos + value.find(w)

16if chars:

17 t.startchar = start_char + value.find(w)

18 t.endchar = start_char + value.find(w)

+len

(w)19

yield t

2021

defchineseanalyzer()

:22return chinesetokenizer(

)然後再將之前的**中的分析器analyzer=stemminganalyzer()替換為analyzer=chineseanalyzer()就行了。

Django haystack實現全文搜尋

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

django haystack實現全文檢索

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

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