1. 程式人生 > >Django中的搜尋功能配置問題

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