Django_haystack全文搜索

haystack是全文搜索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎,点击查看官方网站。

whoosh是用纯Python编写的全文搜索引擎,虽然性能比不上sphinx、xapian、Elasticsearc等,但是无二进制包,程序不会莫名其妙的崩溃,对于小型的站点,whoosh已经足够使用,点击查看whoosh文档。

jieba是一款免费的中文分词包,如果觉得不好用可以使用一些收费产品。

一、全文搜索配置

1)在环境中安装依赖包

pip install django-haystack
pip install whoosh
pip install jieba

2)在项目配置文件settings.py中注册应用

INSTALLED_APPS = (...'haystack',
)

3)在项目配置文件settings.py中指定搜索引擎

# haystack全文搜索配置
HAYSTACK_CONNECTIONS = {'default': {# 使用whoosh引擎'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',# 索引文件存储路径'PATH': os.path.join(BASE_DIR, 'whoosh_index'),}
}# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 修改haystack 默认返回数据量。默认20
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 1

4)在项目的urls.py中添加路由

path('search/', include('haystack.urls'))

5)在haystack中使用jieba分词包

修改haystack源码包目录下的 ./backends/whoosh_backend.py文件

from jieba.analyse import ChineseAnalyzer
#将StemmingAnalyzer()替换为 ChineseAnalyzer()
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=StemmingAnalyzer()), field_boost=field_class.boost, sortable=True)

二、生成索引文件

1)在需要进行全文搜索的模型类同目录下,新建一个search_indexes.py文件(注:文件名称不能自定义)

在文件中写入下面代码:

from haystack import indexes# 导入需要创建索引的模型类
from apps.goods.models import GoodsSKUclass GoodsSKUIndex(indexes.SearchIndex, indexes.Indexable):# 索引字段 use_template=True指定根据表中的哪些字段建立索引文件的说明放在一个文件中text = indexes.CharField(document=True, use_template=True)def get_model(self):# 返回创建索引模型类return GoodsSKU# 建立索引的数据def index_queryset(self, using=None):return self.get_model().objects.all()

2)在templates下面新建目录search/indexes/goods,其中search/indexes/为固定名称,goods为创建索引模型类对应的应用名称。

并在目录下新建一个文件goodssku_text.txt,goodssku为模型类小写,后面部分为固定名称。

3)在goodssku_text.txt文件中指定索引字段

# 指定索引的字段
{{ object.name }}   # object为固定值,可以看成是模型类的实例
{{ object.desc }}
{{ object.goods.detail }}

4)使用命令生成索引文件

python manage.py rebuild_index

索引文件存储在settings中配置的目录下,即whoosh_index

注:如果新增、修改、删除了商品需要重新生成索引文件

三、使用全文搜索

1)在使用全文搜索html中设置如下表单内容

点击搜索就会通过haystack搜索数据

2)定义搜索结果模板

上面的搜索结果会传递给templates/search目录下的search.html,传递的上下文包括:

  • query:搜索关键字
  • page:当前页的page对象,遍历page对象获取到的是SearchResult类的实例对象,对象的object属性才是模型类的对象
  • paginator:分页paginator对象

界面搜索结果


源码等资料获取方法

 各位想获取源码的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19457.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一百二十八、Kettle——从Hive增量导入到ClickHouse

一、目标 用Kettle把Hive的DWS层数据增量导入到ClickHouse中 工具版本:Kettle:8.2 Hive:3.1.2 ClickHouse21.9.5.16 全量导入请访问拙作链接 http://t.csdn.cn/Rqvuvhttp://t.csdn.cn/Rqvuv 二、前提准备 (一)kettl…

Vue3 +Echarts5 可视化大屏——屏幕适配

项目基于Vue3 Echarts5 开发,屏幕适配是使用 scale 方案 Echarts组件按需引入,减少打包体积 地图组件封装(全国&省份地图按需加载) 效果图: 屏幕适配 大屏适配常用的方案有 rem vw/vh 和 scale 。 rem vw/vh …

vue 使用 npm run dev命令后 自动打开浏览器为谷歌

文章目录 需求分析 需求 vue 启动后,想要其自动打开指定浏览器(谷歌)并设置要打开的IP地址和端口号 分析 package.json 打开package.json文件加上 --open chrome index.js 打开index.js文件,将浏览器设置为自动打开

模板类与继承

模板类与继承 模板类继承普通类普通类继承模板类的实例化版本。普通类继承模板类模板类继承模板类模板类继承模板参数给出的基类 模板类继承普通类 基类 派生类 测试函数; 普通类继承模板类的实例化版本。 模板基类 普通类继承模板基类的实例化版本: 普通…

LVS和keepa lived群集

keepa lived 简述 一.keepalived 服务重要功能 1管理LS负载均衡器软件 keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理Lvs配置以及服务的启动 停止功能 这会使 LVS应用跟更加简便 2 支持故障自动切换 (failover) ①两台知己同时安装好kee…

Kotlin~Decorator装饰器模式

概念 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。可以运行时动态添加新的功能,而无需改变原来的代码。 特点: 灵活扩展新的功能动态…

buu-Reverse-[2019红帽杯]childRE

目录 [2019红帽杯]childRE 修饰函数名和函数签名是什么? 对于变换部分的具体分析: [2019红帽杯]childRE 下载附件,查壳,无壳 在IDA中打开,定位主函数 int __cdecl main(int argc, const char **argv, const char …

Kotlin~责任链模式

概念 允许多个对象按顺序处理请求或任务。 角色介绍 Handler: 处理器接口,提供设置后继者&#xff08;可选&#xff09;ConcreteHandler&#xff1a;具体处理器&#xff0c;处理请求 UML 代码实现 比如ATM机吐钱就可以使用责任链实现。 class PartialFunction<in P1, o…

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 列式数据是如何存储与处理的

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

无聊猿惨遭亏本甩卖 “贵族”持有人沦为“大冤种

被称为NFT贵族的无聊猿&#xff08;BAYC&#xff09;正在进行挥泪大甩卖&#xff0c;歌手黄立成等持有者们近期不断抛售BAYC NFT&#xff0c;导致该系列NFT地板价一度跌至30 ETH&#xff08;约5.7万美元&#xff09;以下。 一年多以前&#xff0c;BAYC还是时尚界的宠儿&#x…

JavaCV实现byte[]转RTMP流

需求&#xff1a;通过私有的api我可以不断收到byte[]形式的视频数据&#xff0c;现在我需要处理这些数据&#xff0c;最终推送出RTMP流。 实现&#xff1a;通过管道流将不断收到的byte[]视频数据转化为输入流然后提供给JavaCV的FFmpegFrameGrabber使用&#xff0c;然后通过FFmp…

96、基于STM32单片机的温湿度DHT11 烟雾火灾报警器蓝牙物联网APP远程控制设计(程序+原理图+任务书+参考论文+开题报告+流程图+元器件清单等)

单片机及温湿度、烟雾传感器是烟雾报警器系统的两大核心。单片机好比一个桥梁&#xff0c;联系着传感器和报警电路设备。近几年来&#xff0c;单片机已逐步深入应用到工农业生产各部门及人们生活的各个方面。各种类型的单片机也根据社会的需求而开发出来。单片机是器件级计算机…