Django-haystack全文检索:haystack+whoosh+jieba返回接口格式内容
Django Haystack 简介
django-haystack 是一个专门提供搜索功能的 django 第三方应用,它支持 Solr、Elasticsearch、Whoosh、Xapian 等多种搜索引擎,配合中文自然语言处理库 jieba实现中文分词
这里以一个商城商品搜索接口为例!
为什么要返回接口格式
用于实现前后端分离
前后端分离是一种架构模式,说通俗点就是后端项目里面看不到页面(JSP|HTML),后端给前端提供接口,前端调用后端提供的REST风格接口就行,前端专注写页面(html|jsp)和渲染(JS|CSS|各种前端框架);后端专注写代码就行。前后端分离的核心:后台提供数据,前端负责显示
安装环境
pip install django-haystack
pip install whoosh
pip install jieba
配置Haystack
# settings.py
INSTAKKED_APPS = [
...
'haystack'#注册haystack
]
...
HAYSTACK_CONNECTIONS = {
'default': {
#ENGINE指定了 django haystack 使用的搜索引擎
'ENGINE': 'shop.whoosh_cn_backend.WhooshEngine',#shopAPP下编写whoosh_cn_backend.py文件 后面会说
#后面rebuild_index,生成的索引文件目录
'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
}
}
# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# haystack自动分页默认每页显示20个 可以根据自己的需求设置显示个数
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 20
创建app
>>python manage.py startapp shop
编写models文件
class Category(models.Model):
"""商品分类"""
name = models.CharField(max_length=20, verbose_name='分类名称')
desc = models.CharField(max_length=50, verbose_name='分类描述')
parent = models.ForeignKey('self', default=0, null=True, blank=True, related_name='children', verbose_name='上级分类',
limit_choices_to={
'is_abort': False, 'is_root': True}, on_delete=models.CASCADE)
is_root = models.BooleanField(default=0, verbose_name='是否是一级分类')
is_abort = models.BooleanField(default=False, verbose_name='是否删除')
def __str__(self):
return self.name
class CategoryImage(models.Model):
"""分类图片"""
name = models.CharField(max_length