Django搜索功能的实现

在用Django搭建网站的时候,要实现一个搜索功能,实现对数据库的检索功能,这里用到了网上的几个标准库: django-haystack, whoosh, jieba。
其中这里有详细的haystack中文教程
1 首先是在相应的环境中安装,pip install 上面这三个。这个是默认安装anaconda的环境里,当然你也可以安装到自己的虚拟环境中。
在这里插入图片描述
2 进行配置,首先是在Django的settings 里进行配置。
在APPS 里,写在默认的之后,自定义的app 之前
在这里插入图片描述

在settings.py 文件的末尾加入如下代码:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.whoos_backend.WhooshEngine',
        'PATH': os.path.join(BASE_DIR, 'whoosh_index')
    }
}

HAYSTACK_SEARCH_RESULT_PER_PAGE = 3

其中引擎来自我们导入的模块中的类
在这里插入图片描述

3,SearchIndexes对象是Haystack决定那些数据应该放入索引和处理流数据的方式,就是在你要用到搜索功能的那个app里,创建search_indexes.py文件,而且尽量不要改文件文件,方便它自己查找这个文件。
这里我要查的是goods, 所以直接放到goods 这个APP 里,并且在里面写入如下代码:

from haystack import indexes
from goods.models import GoodsModel

class GoodsModelIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        return GoodsModel

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

然后在templates文件夹下新建一个文件夹search, 再在里面新建文件夹indexes,再在里面新建文件夹goods,在goods 文件夹里新建文件goodsmodel_text.txt,
这里需要注意,层级关系不能乱,如下图
在这里插入图片描述
object表示从数据库获取到的数据,点后面跟的是数据的属性
下来,在主文件的urls中,加入search的路由
在这里插入图片描述

最后,
所有配置完成,把数据库中的数据放入索引,在你相应的文件目录中输入 manage.py rebuild_index
在这里插入图片描述
输入y 表示确认,可以看到你的数据库里的商品个数
在这里插入图片描述
(如果你只是低流量或者你的搜索引擎能处理,加入自动更新索引,在setting.py 文件中加入如下代码)
自动更新索引

至此,所以配置已经完成,我们来试一试。
首先,进行前后端的配置,如下图
在这里插入图片描述
之后是在search.html 里面进行配置
在这里插入图片描述

可以看到数据库中有good.pic 这个属性,但是因为没有在goodmodel_text.txt 中写入,即使在前端写入了, 也不会再网页上显示出来。 以上就是全部的内容,