Django全文檢索

2021-09-12 02:46:50 字數 3104 閱讀 3119

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

python提供了各種全文檢索的模組,最常見的如haystack模組進行全文檢索整體管理操作,後台使用注入whoosh、solr、xapain、elasticsearc全文搜尋引擎進行操作,其中whoosh是純python開發的全文搜尋引擎,可以方便穩定的進行資料的檢索操作功能,並在實際 操作過程中結合jieba中文分詞模組對中文進行分詞操作,達到最優的操作成本,是目前專案中較為流行的一種全文檢索方式

官方文件:

1.1安裝模組

首先安裝全文檢索管理模組haystack、全文搜尋引擎模組whoosh和中文分詞jieba

>>>pip install haystack whoosh jieba
1.2django專案中新增haystack應用
..

..'haystack', #這個模組新增到所有子應用模組的前面

]

1.3專案中新增搜尋引擎配置

修改django專案配置檔案,新增搜尋引擎配置選項選項[專案settings.py配置檔案]

..

#搜尋引擎配置

haystack_connections=

}#自動更新載入中文分詞索引支援

haystack_signal_processor = 『haystack.signals.realtimesignalprocessor』

1.4配置全文檢索路由

全文檢索搜尋過程是由haystack模組進行操作的,所以搜尋路由操作交給haystack進行處理,修改路由配置如下:

..

urlptterns=[

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

]

1.5 搜尋管理模組

在應用模組下建立search_indexes.py模組檔案,管理搜尋的資料模型

from haystack import

from . import models

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

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

def index.queryset(self,using=none):

return self.get_model().object.all()

1.6搜尋資訊管理檔案

在應用目錄中建立templates/search/indexes/模型名稱_text.txt檔案,編輯可搜尋內容

}
1.7構建搜尋結果展示頁面

在應用目錄中建立templates/search/search.html展示結果頁面

}啥也沒找到

|

1.8構建中文分詞分析模組【改寫haystack的分詞模組】

whoosh作為乙個全文搜尋模組,分詞功能和檢索功能已經非常強大,但是針對中文的處理還是比較欠缺,所以通過jieba模組重寫分詞操作,支援whoose對中文的強大操作

開啟安裝的whoosh模組目錄,在python安裝目錄的site_packages/目錄下找到對應的目錄檔案haystack/backends/,建立乙個新的中文分詞模組chineseanalyzer.py

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

def chineseanalyzer():

return chinesetokenizer()

找到whoosh中文分詞模組site_packages/haystack/backends/目錄下的分詞後台處理檔案whoose_backend.py,複製為whoosh_cn_backend.py,編輯內部內容

..

from .chineseanalyzer import chineseanalyzer

..# 搜尋查詢賦值引數

analyzer=stemminganalyzer()

# 將分析器物件更改為我們自定義的中文分詞分析器

analyzer=chineseanalyzer()

1.9初始化分詞索引

完成上述工作之後,中文分詞全文檢索已經完成,專案中支援對article資料物件的中文分詞全文搜尋功能了,接下來針對已經建立好的專案資料進行索引資料的初始化

>>>python manage.py rebuild_index
1.10搜尋

在需要搜尋紅牛的網頁中,新增搜尋表單

全文檢索 Django

全文檢索不同於特定欄位的模糊查詢,使用全文檢索的效率更高,並且能夠對於中文進行分詞處理 haystack django的乙個包,可以方便地對model裡面的內容進行索引 搜尋,設計為支援whoosh,solr,xapian,elasticsearc四種全文檢索引擎後端,屬於一種全文檢索的框架 who...

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