全文檢索 Django

2021-08-14 15:54:36 字數 3248 閱讀 1433

**

全文檢索不同於特定欄位的模糊查詢,使用全文檢索的效率更高,並且能夠對於中文進行分詞處理

haystack:django的乙個包,可以方便地對model裡面的內容進行索引、搜尋,設計為支援whoosh,solr,xapian,elasticsearc四種全文檢索引擎後端,屬於一種全文檢索的框架

whoosh:純python編寫的全文搜尋引擎,雖然效能比不上sphinx、xapian、elasticsearc等,但是無二進位製包,程式不會莫名其妙的崩潰,對於小型的站點,whoosh已經足夠使用

jieba:一款免費的中文分詞包,如果覺得不好用可以使用一些收費產品

1.在虛擬環境中依次安裝包

pip install django-haystack

pip install whoosh

pip install jieba

2.修改settings.py檔案

新增應用

...'haystack',)

3.新增搜尋引擎

haystack_connections = 

}

4.自動生成索引

haystack_signal_processor = 'haystack.signals.realtimesignalprocessor'
5.在專案的urls.py中新增url

urlpatterns = [

...url(r'^search/', include('haystack.urls')),

]

6.在應用目錄下建立search_indexes.py檔案

coding=utf-8

from haystack import indexes

from models import goodsinfo

class

goodsinfoindex

(indexes.searchindex, indexes.indexable):

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

defget_model

(self):

return goodsinfo

defindex_queryset

(self, using=none):

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

7.在目錄「templates/search/indexes/應用名稱/」下建立「模型類名稱_text.txt」檔案

goodsinfo_text.txt,這裡列出了要對哪些列的內容進行檢索

}}

}

8.在目錄「templates/search/」下建立search.html

title>

head>

搜尋結果如下:h3>

href="/

}/">

}a>

啥也沒找到p>

href="?q=

}&page=

}">

a>

|

href="?q=

}&page=

}">

a>

div>

body>

html>

9.建立chineseanalyzer.py檔案

儲存在haystack的安裝資料夾下,路徑如「/home/python/.virtualenvs/django_py2/lib/python2.7/site-packages/haystack/backends」

import jieba

from whoosh.analysis import tokenizer, token

class

chinesetokenizer

(tokenizer):

def__call__

(self, value, positions=false, chars=false,

keeporiginal=false, removestops=true,

start_pos=0, start_char=0, mode='', **kwargs):

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

**kwargs)

seglist = jieba.cut(value, cut_all=true)

for w in seglist:

t.original = t.text = w

t.boost = 1.0

if positions:

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

if chars:

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

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

yield t

defchineseanalyzer

():return chinesetokenizer()

10.複製whoosh_backend.py檔案,改名為whoosh_cn_backend.py

注意:複製出來的檔名,末尾會有乙個空格,記得要刪除這個空格

from .chineseanalyzer import chineseanalyzer 

查詢:analyzer=stemminganalyzer()

改為:analyzer=chineseanalyzer()

11.生成索引

初始化索引資料

python manage.py rebuild_index

12.在模板中建立搜尋欄

method='get'

action="/search/"

target="_blank">

type="text"

name="q"> //此處name必須命名為 q

type="submit"

value="查詢">

form>

Django全文檢索

最常見的全文檢索就是我們在資料庫進行的模糊查詢,但是模糊查詢是針對整體的內容的乙個動態匹配過程,在資料量較大的情況下匹配效率極低,常規專案中資料量一般都比較多並且內容繁雜,所以正常的專案搜尋功能中很少使用模糊查詢進行操作 python提供了各種全文檢索的模組,最常見的如haystack模組進行全文檢...

django 實現全文檢索

全文檢索不同於特定欄位的模糊查詢,使用全文檢索的效率再高,並且能夠對於中文進行分詞處理。安裝包 pip install django haystack pip install whoosh pip install jieba修改settings檔案 haystack 全文檢索框架 全文檢索框架的配置...

Django搜尋工具 全文檢索

pip install django haystack pip install whoosh pip install jieba haystack coding utf 8 haystack connections 當新增 修改 刪除資料時,自動生成索引 haystack signal proces...