Django全文搜尋功能

2022-06-26 10:24:09 字數 2327 閱讀 2980

1. 使用全文搜尋框架django-haystack

2. 使用搜尋引擎whoosh

3. 安裝

pip install django-haystack

pip install whoosh

4. 配置

settings.py中

# 全文檢索框架配置

haystack_connections =

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

haystack_signal_processor = 'haystack.signals.realtimesignalprocessor'

5. 檔案生成

2. 在templates下面建立資料夾templates/search/indexes/goods/goodssku_text.txt,寫入以下內容

#

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

#} ,接受跨表欄位名

} #

根據商品的名稱建立索引

} #

根據商品的簡介建立索引

} #

根據商品的詳情建立索引

3. 環境終端執行python manage.py rebuild_index. 此時就會生成乙個新資料夾,可以嘗試

6. 使用全文檢索

1. 前端頁面提交表單到乙個url中進行處理,建議url設定為/search

get請求,請求位址為/search

class="

search_con fl

">

2. 配置url

固定寫法,當有請求傳送過來是,交給haystack.urls進行處理

urlpatterns =[

url(r

'^admin/

', admin.site.urls),

url(r

'^tinymce/

', include('

tinymce.urls

')),

url(r

'^search

', include('

haystack.urls

')), # 加入這一行

...]

3.  請求的返回結果

當請求傳達給haystack後,haystack會把搜尋出的結果傳遞給templates/search下的search.html(需要手動建立)

①傳遞的上下文包括:

1)query:搜尋關鍵字

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

3)paginator:分頁paginator物件,

4)通過在settings.py中設定haystack_search_results_per_page = 1 可

以控制每頁顯示數量

7. 前端顯示(這裡還沒有弄明白)

class="

pagenation

">

"/search?q=}&page=}

"/search?q=}&page=}

"class="

active

">}

"/search?q=}&page=}

">}

"/search?q=}&page=}

8. 使用jieba分詞,效果比haystark預設的要好很多

pip install jieba

#然後在資料夾/python路徑/lib/python2.7.5/site-packages/haystack/backends/whoosh_backend.py ,

將裡面的whoosh_backend.py複製乙份還在此資料夾下,改名為whoosh_cn_backend.py,並修改兩行**

from jieba.analyse import chineseanalyzer #在頂部新增

schema_fields[field_class.index_fieldname] = text(stored=true, analyzer=chineseanalyzer(),field_boost=field_class.boost, sortable=true) #找到這個然後修改,大概在160行

# 然後在settings.py中修改配置

# 全文檢索框架配置

haystack_connections =

}

具體參考:

django全文搜尋

麻雀雖小,搜尋引擎還是不能少的,要不然每次都得去資料庫匹配,django通過haystack搜尋框架可以很容易實現乙個搜尋功能的,whoosh採用的python編寫,效能一般但足夠用,這裡就用這個,開始部署 先安裝pip install whoosh django haystack jieba wh...

Django新增全文搜尋功能入門篇

blog 此models.py的內容假設如下 from django.db import models from django.contrib.auth.models import user class note models.model user models.foreignkey user pu...

mysql全文搜尋功能

一 語法 match col1,col2,against expr search modifier search modifier 二 mysql支援全文索引和搜尋 1 全文索引在mysql裡面索引型別是 fulltext 2 全文索引只能用在innodb或者 myisam儲存引起的表中,並且只能在...