Django全文搜索框架haystack 和 drf_haystack
时间:2021-07-11
本文章向大家介绍Django全文搜索框架haystack 和 drf_haystack,主要包括Django全文搜索框架haystack 和 drf_haystack使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、安装和配置
# 安装
pip install whoosh
pip install jieba
pip install django-haystack
pip install drf_haystack
配置
# 在INSTALL_APPS里加上 haystack (加在最后)
INSTALLED_APPS = [
...
'haystack',
...
]
# 增加搜索引擎配置(有solr,whoosh,elastic search),这里选择whoosh
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
},
}
# 配置自动更新索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 配置搜索结果的分页器的每页数量(rest-framework里面用不到)
# HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
2、指明要索引的字段
创建上图所示路径及文件
# 创建文件 templates/search/indexes/myapp/note_text.txt
# myapp是想要建立索引的app,note是你要建立缩印的那个模型名字(小写)
# txt文件内容:将title、content、和id三个字段添加到索引
{{ object.title }}
{{ object.content }}
{{ object.id }}
3、编辑search_indexes.py文件
# 在app中新建search_indexes.py文件,并编辑以下内容
from haystack import indexes
from .models import Article
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
"""
Article索引数据模型类
"""
text = indexes.CharField(document=True, use_template=True)
id = indexes.IntegerField(model_attr='id')
title = indexes.CharField(model_attr='title')
content = indexes.CharField(model_attr='content')
# 下面的createtime字段并没有在上面加索引,写上是因为后面的过滤filter和排序order_by用到
# 注意:这里修改的话一定要重新建立索引,才能生效。python manage.py rebuild_index
createtime = indexes.DateTimeField(model_attr='createtime')
def get_model(self):
"""返回建立索引的模型类"""
return Article
def index_queryset(self, using=None):
"""返回要建立索引的数据查询集"""
return self.get_model().objects.all()
4、编辑索引的serializer序列化器
# 在serializer.py文件中进行编辑
class ArticleIndexSerializer(HaystackSerializer):
"""
Article索引结果数据序列化器
"""
class Meta:
index_classes = [ArticleIndex]
fields = ('text', 'id', 'title', 'content', 'createtime')
# 这里可以写ignore_fields来忽略搜索那个字段
5、编辑视图
class ArticleSearchViewSet(HaystackViewSet):
"""
Article搜索
"""
index_models = [Article]
serializer_class = ArticleIndexSerializer
6、别忘了编辑路由
router.register('articles/search', views.ArticleSearchViewSet, base_name='articles_search')
参考了:https://blog.csdn.net/smartwu_sir/article/details/80209907
原文地址:https://www.cnblogs.com/kopok/p/14999533.html
- JAVA CDI 学习(3) - @Produces及@Disposes
- 3分钟带你学会git向github推送!
- JAVA CDI 学习(4) - @Alternative/@Default/@Any & Extension
- centos6.6 下安装mysql
- silverlight 4 tools for vs2010无法在vs2010 SP1上安装的解决办法
- find命令小结
- Python加圣诞帽
- 多次grep 没有看到输出
- java多线程 基础demo
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- mybatis 使用tips - 使用多个参数
- 从高的角度看自动化测试
- Django中请求的生命周期
- 程序猿python学习AIphaZero,TensorFlow强化学习AI游戏,100行代码运行看看!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1374E1(贪心+优先队列)
- codeforces 455A(dp)
- codeforces 1296E1(贪心+思维)
- codeforces 1216E1(数学+暴力)
- JDBC基础入门使用
- codeforces 1353E(dp)
- codeforces 1396A(构造)
- codeforces 1335E1+E2(思维)
- JSP开发基础入门学习1
- codeforces 1407C(数学+交互题)
- codeforces 1420C1
- codeforces 1417D(思维,构造)
- Servlet基础入门学习2
- codeforces 1426D(思维)
- codeforces 1324E(dp)