根据上篇所学的内容,在“极致果蔬”项目中添加全文检索的功能。搜索功能分为两部分:一是用户输入后下拉显示提示商品信息;二是用户点击搜索后会跳到搜索结果页面。
1.安装 python 全文索引包
pip install django-haystack==2.7.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install whoosh -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install jieba
2.全文检索配置
在 settings.py 文件中注册 haystack 应用并配置;
INSTALLED_APPS = [
...
'haystack',
...
]
# 全文检索框架
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
},
}
# 自动更新索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
3.建立索引
在 goods 应用下新建生成索引的文件 search_indexes.py (名字固定不能改);
from haystack import indexes
from .models import GoodsSKUBean
class GoodsSKUBeanIndex(indexes.SearchIndex,indexes.Indexable):
# 类名必须为需要检索的Model_name+Index,这里需要检索Article,所以创建ArticleIndex
# document=True以为这个text是一个索引字段
# 在goods的应用中,只能索引goods的内容
# use_template根据哪些字段建立索引,将说明放入一个文件中
text = indexes.CharField(document=True,use_template=True) # 创建一个text字段
sale_count = indexes.CharField(model_attr='sale_count') # 创建一个排序字段
def get_model(self): # 重载 get_model 方法,必须要有!
return GoodsSKUBean
# 建立索引的数据
def index_queryset(self, using=None):
return self.get_model().objects.all()
在目录“templates/search/indexes/goods”下创建 goodsskubean_text.txt 文件;
{
{ object.name }}
{
{ object.description }}
运行:python manage.py rebuild_index 生成索引文件(每修改一次索引内容需要生成一次),在项目目录中会出现如下文件;
4.使用索引
在 goods 应用下的 urls.py 中添加路径,搜索结果交给 haystack.urls 对应的视图处理;
url(r'^search/',include('hayst