原文:
- project
- project
- settings.py
- blog
- models.py
此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
檔案,內容為
searchh2>
} td>
td>
tr>
table>
resultsh3>
}a>
p>
no results found.p>
« previousa>
|next »a>
div>
form>
很明顯,它自帶了分頁。
6.最後一步,重建索引檔案
使用python manage.py rebuild_index
或者使用update_index
命令。
好,下面執行專案,進入該url搜尋一下試試吧。
第一步將檔案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)
第二步
在settings.py
中修改引擎,如下
import os
haystack_connections = ,
}
第三步
重建索引,在進行搜尋中文試試吧。
索引自動更新
如果沒有索引自動更新,那麼每當有新資料新增到資料庫,就要手動執行update_index
命令是不科學的。自動更新索引的最簡單方法在
settings.py
新增乙個訊號。
haystack_signal_processor =
"haystack.signals.realtimesignalprocessor"
官方文件
看了這入門篇,你現在應該大概能配置乙個簡單的全文搜尋了吧,如果想自定義怎麼辦? 建議閱讀官方文件和github的原始碼。
Django haystack實現全文搜尋
搜尋可以使用最原始的like的方式進行搜尋。當然這種搜尋方式對於些小的資料是非常合適的。但是隨著資料越來越大。這時候我們就需要使用搜尋引擎了。搜尋引擎會將所有要搜尋的資料使用演算法做個素引,以後搜尋的時候就只需要根據這個索引腳找到相應的資料。搜尋引擎做索引的過程會比較慢,但是一旦索引建立完成,那麼以...
django haystack實現全文檢索
haystack配置使用 前後端分離 索引檔案生成 替換成jieba分詞 索引檔案使用 1.haystack是django的開源搜尋框架,該框架支援solr,elasticsearch,whoosh,xapian 搜尋引擎,不用更 改 直接切換引擎,減少 量。2.搜尋引擎使用whoosh,這是乙個由...
django haystack外掛程式基本使用操作流程
搜尋可以使用最原始的模糊匹配的like方式進行搜尋。當然這種搜尋方式對於一些小量的資料是非常合適的。但是隨著資料量越來越大。這時候我們就需要使用搜尋引擎了。搜尋引擎會將所有需要搜尋的資料使用演算法做乙個索引,以後搜尋的時候就只需要根據這個索引即可找到相應的資料。搜尋引擎做索引的過程會比較慢,甚至占用...