Django中的搜尋功能配置問題
搜尋框架
haystack 搭建了使用者和搜尋引擎之間的溝通問題
配置:
1) 安裝python包。
pip install django-haystack
pip install whoosh
2) 在settings.py檔案中註冊應用haystack並做如下配置。
3)在goods應用目錄下新建一個search_indexes.py檔案,在其中定義一個商品索引類e。
4)在templates下面新建目錄search/indexes/goods。
在此目錄下面新建一個檔案goodssku_text.txt
5)使用命令生成索引檔案。
python manage.py rebuild_index
全文檢索的使用:
1)配置url。
2)表單搜尋時設定表單內容如下。
點選標題進行提交時,會通過haystack搜尋資料。
全文檢索結果:
搜尋出結果後,haystack會把搜尋出的結果傳遞給templates/search目錄下的search.html,傳遞的上下文包括:
query:搜尋關鍵字
page:當前頁的page對象
paginator:分頁paginator對象
通過HAYSTACK_SEARCH_RESULTS_PER_PAGE
改變分詞方式:
1. 安裝jieba分詞模組。
pip install jieba
2. 找到虛擬環境py_django下的haystack目錄。
/home/python/.virtualenvs/bj10_py3/lib/python3.5/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
5. 打開復製出來的新檔案,引入中文分析類,內部採用jieba分詞。
from .ChineseAnalyzer import ChineseAnalyzer
6. 更改詞語分析類。
查詢
analyzer=StemmingAnalyzer()
改為
analyzer=ChineseAnalyzer()
9. 重新建立索引資料
python manage.py rebuild_index