全文檢索
全文檢索不同於特定欄位的模糊查詢,使用全文檢索的效率更高,並且能夠對於中文進行分詞處理
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...