在用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 中写入,即使在前端写入了,
也不会再网页上显示出来。