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

2021-08-07 18:07:54 字數 3487 閱讀 8818

blog

models.py的內容假設如下:

from django.db import models

from django.contrib.auth.models import user

class note(models.model):

user = models.foreignkey(user)

pub_date = models.datetimefield()

title = models.charfield(max_length=200)

body = models.textfield()

def __str__(self):

return self.title

1. 首先安裝各工具

pip install whoosh django-haystack jieba

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.sites',

# added. haystack先新增,

'haystack',

'blog',]

3. 修改 你的 settings.py,以配置引擎

本教程使用的是whoosh,故配置如下:

import os

haystack_connections = ,

}

其中顧名思義,engine為使用的引擎必須要有,如果引擎是whoosh,則path必須要填寫,其為whoosh 索引檔案的存放資料夾。

其他引擎的配置見官方文件

4.建立索引

import datetime

from haystack import indexes

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

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

author = indexes.charfield(model_attr='user')

pub_date = indexes.datetimefield(model_attr='pub_date')

def get_model(self):

return note

def index_queryset(self, using=none):

"""used when the entire index for model is updated."""

return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())

每個索引裡面必須有且只能有乙個欄位為document=true,這代表haystack 和搜尋引擎將使用此字段的內容作為索引進行檢索(primary field)。其他的字段只是附屬的屬性,方便呼叫,並不作為檢索資料。

注意:如果使用乙個字段設定了document=true,則一般約定此欄位名為text,這是在searchindex類裡面一貫的命名,以防止後台混亂,當然名字你也可以隨便改,不過不建議改。

}

}}

這個資料模板的作用是對note.title,note.user.get_full_name,note.body這三個字段建立索引,當檢索的時候會對這三個欄位做全文檢索匹配。

5.在url配置中新增searchview,並配置模板

urls.py中配置如下url資訊,當然url路由可以隨意寫。

(r'^search/', include('haystack.urls')),
其實haystack.urls的內容為,

from django.conf.urls import url

from haystack.views import searchview

urlpatterns = [

url(r'^$', searchview(), name='haystack_search'),

]

所以需要在blog/templates/search/下新增search.html檔案,內容為

很明顯,它自帶了分頁。

6.最後一步,重建索引檔案

使用python manage.py rebuild_index或者使用update_index命令。

好,下面執行專案,進入該url搜尋一下試試吧。

下面要做的,使用jieba分詞

1 將檔案whoosh_backend.py(該檔案路徑為python路徑/lib/python3.4/site-packages/haystack/backends/whoosh_backend.py

修改為如下

schema_fields[field_class.index_fieldname] =

text(stored=true, analyzer=chineseanalyzer(),

field_boost=field_class.boost)

2 在settings.py中修改引擎,如下

import os

haystack_connections = ,

}

3 重建索引,在進行搜尋中文試試吧。

索引自動更新

如果沒有索引自動更新,那麼每當有新資料新增到資料庫,就要手動執行update_index命令是不科學的。自動更新索引的最簡單方法在

settings.py新增乙個訊號。

haystack_signal_processor =

"haystack.signals.realtimesignalprocesso"

官方文件

看了這入門篇,你現在應該大概能配置乙個簡單的全文搜尋了吧,如果想自定義怎麼辦? 建議閱讀官方文件和github的原始碼。

Django全文搜尋功能

1.使用全文搜尋框架django haystack 2.使用搜尋引擎whoosh 3.安裝 pip install django haystack pip install whoosh 4.配置 settings.py中 全文檢索框架配置 haystack connections 當新增,修改,刪除...

django全文搜尋

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

mysql全文搜尋功能

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