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儲存引起的表中,並且只能在...