全文檢索python

2021-08-31 13:24:00 字數 3291 閱讀 6995

全文檢索

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

jieba

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

django中的全文檢索安裝配置

1.依賴包安裝

pip install django-haystack

pip install whoosh

2.在settings.py檔案配置

...'haystack', #全文檢索框架

)

# 全文檢索框架的配置

haystack_connections =

}# 當新增、修改、刪除資料時,自動生成索引

haystack_signal_processor = 'haystack.signals.realtimesignalprocessor'

# 指定搜尋結果每頁顯示的條數

haystack_search_results_per_page=1

3.在專案的urls.py中新增url

urlpatterns = [

...path(r'search/', include('haystack.urls')), # 全文檢索框架

]

4.索引檔案生成

# 定義索引類

from haystack import indexes

# 匯入你的模型類

from goods.models import goodssku

# 指定對於某個類的某些資料建立索引

# 索引類名格式:模型類名+index

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

# 索引字段 use_template=true指定根據表中的哪些字段建立索引檔案的說明放在乙個檔案中

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

def get_model(self):

# 返回你的模型類

return goodssku

# 建立索引的資料

def index_queryset(self, using=none):

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

# 指定根據表中的哪些字段建立索引資料

} # 根據商品的名稱建立索引

} # 根據商品的簡介建立索引

} # 根據商品的詳情建立索引

5.搜尋表單模板示例

#注意action和name的值是固定
6.在目錄「templates/search/」下建立search.html

搜尋出結果後,haystack會把搜尋出的結果傳遞給templates/search目錄下的search.html,傳遞的上下文包括:

query:搜尋關鍵字

page:當前頁的page物件 –>遍歷page物件,獲取到的是searchresult類的例項物件,物件的屬性object才是模型類的物件。

paginator:分頁paginator物件

search.html示例

搜尋的關鍵字:}

當前頁的page物件:}

分頁paginator物件:}

7.改變分詞方式(jieba分詞模組)

1.安裝jieba分詞模組

pip install jieba

2.進入到專案環境目錄

cd ~/anaconda3/envs/myshop-py3.6.2-dj2.0/lib/python3.6/site-packages/haystack/backends

3.在上面的目錄中建立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()

4.複製whoosh_backend.py檔案,改為如下名稱whoosh_cn_backend.py

cp whoosh_backend.py whoosh_cn_backend.py

5.開啟複製出來的新檔案,引入中文分析類,內部採用jieba分詞。

from .chineseanalyzer import chineseanalyzer

6.更改詞語分析類

查詢analyzer=stemminganalyzer()

改為analyzer=chineseanalyzer()

7.修改settings.py檔案中的配置項

調整引擎

'engine': 'haystack.backends.whoosh_backend.whooshengine',

為'engine': 'haystack.backends.whoosh_cn_backend.whooshengine',

8.重新建立索引資料

python manage.py rebuild_index

什麼叫全文檢索 全文檢索概念

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...

什麼叫全文檢索 全文檢索概念

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...

MSSQL全文檢索

大家可能都會用 select from tb where field like 關鍵字 但是一旦資料量大使用者多,就會造成查詢過慢,因此ms提供一種犧牲空間來換取時間的解決方案。全文檢索。原文請看 我對自己的實現加了些注釋 use popask 使用這個庫 exec sp fulltext data...