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.mzph.cn/news/455.shtml

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

相关文章

LiveNVR监控流媒体Onvif/RTSP功能-安全控制HTTP接口鉴权开启禁止游客访问开启后401 Unauthorized如何播放调用接口

LiveNVR安全控制HTTP接口鉴权开启禁止游客访问开启后401 Unauthorized如何播放调用接口? 1、安全控制1.1、接口鉴权1.2、禁止游客访问 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.2.1、携带 CookieToken2.1.2.2、携带 U…

使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

一、Feign介绍 Feign是一个声明式的HTTP客户端框架,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。 Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下&am…

opencv 基础学习08-图像通道操作

opencv 基础学习08-图像通道操作 什么是图像通道?通道操作:**1 通过索引拆分**2 通过opencv 函数拆分通道合并 什么是图像通道? OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多…

你的隐私被泄漏了吗

近日,某高校毕业生在校期间窃取学校内网数据,收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代,算法分发带来了隐私侵犯,在享受消费生活等便捷权利的同时,似乎又有不…

【Vue3】setup参数细讲!computed计算属性和watch监听属性

setup参数细讲!computed计算属性和watch监听属性 setup细讲!setup参数,steup(props,context)参数1.props,负责接收父组件传过来的值参数2.contextcontext.attrscontext.emitcontext.slots, 插槽…

.Net Core Restful Api 版本区分第一种

前言:在我们进行Web Api开发时,版本的区分,是必须要考虑的,涉及到我们的版本发布,切换等,如何从旧版本无缝的切换到新版本? 下面,我们通过使用[ApiVersion]特性,实现两个…

Spring MVC 系列1 -- 初识Spring MVC

目录 1. 什么是 Spring MVC? 2. MVC定义 3. 创建SpringMVC项目 ​4. Spring MVC要学习哪些? 1. 什么是 Spring MVC? 官⽅对于 Spring MVC 的描述是这样的: 翻译成中文 从上述定义我们可以得出两个关键信息: 1. Spring MVC 是…

conda疑难杂症

annaconda、miniconda和conda的关系 conda官网 https://docs.conda.io/projects/conda/en/latest/ 下载安装Anaconda: https://www.anaconda.com/products/distribution#Downloads 下载安装Miniconda:https://docs.conda.io/en/latest/miniconda.html 安装 安装…

7月6日华为云盘古气象大模型登上《Nature》杂志:相比传统数值预报快10000倍

7月6日,国际顶级学术期刊《自然》(Nature)杂志正刊发表了华为云盘古大模型研发团队的最新研究成果——《三维神经网络用于精准中期全球天气预报》(《Accurate medium-range global weather forecasting with 3D neural networks》…

C/C++实现高并发http服务器

http高并发服务器实现 基础知识 html,全称为html markup language,超文本标记语言。 http,全称hyper text transfer protocol,超文本传输协议。用于从万维网(WWW:World Wide Web)服务器传输超…

win10远程桌面控制Ubuntu服务器 - 内网穿透实现公网远程

文章目录 前言视频教程1. ubuntu安装XRDP2.局域网测试连接3. Ubuntu安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 转载自cpolar极点云文章:树莓派使用Nginx 搭建轻量级网站远程访问 前言 XRDP是一种开源工具,它允许用户通过Windows R…

【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str

文章目录 问题情境报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 问题情境 本解决方案适用情境:在本地可以正常运行的flask项目,放到云服务器报错TypeError: tuple indices must be integers or slices, not str,即代码…

Tomcat之配置文件详解

Tomcat 目录 安装好 Tomcat 后,打开它的文件夹,可以看到以下目录 bin:存放各种启动、关闭和其它程序的脚本 conf:配置文件及相关数据文件存放的目录 lib:Tomcat 使用的库文件存放的目录,如存放 Servlet 规范的 API logs:默认日志文件存放…

《生活教育》期刊简介及投稿邮箱

《生活教育》期刊简介及投稿邮箱 《生活教育》杂志创办于1934,是中华人民共和国教育部主管的国家重点学术期刊,国家级期刊,中国知网全文收录G4期刊,它的理论是陶行知教育思想的主线和重要基石,陶行知的教育理论&#…

基于单片机的老人防摔倒的设计与实现

功能介绍 以51单片机作为主控系统;通过LCD1602液晶显示屏显示当前的经纬度及时间的信息;温度传感器采集当前体温;通过GPS接收模块获得当前位置的位置的经度、纬度、时间和高度等信息;通过ADXL345检测老人摔倒的一瞬间重力加速度通…

面试题更新之-vue2x监听方面有什么缺点?所以才有了vue3.0

文章目录 vue2x监听vue3.0监听vue2x监听方面有什么缺点?所以才有了vue3.0 vue2x监听 在Vue.js 2.x中,你可以通过监听属性来响应数据的变化。以下是几种常见的监听方式: 监听计算属性:你可以使用computed属性来创建一个计算属性&…

排序算法第二辑——选择排序

一,选择排序 选择排序算是简单排序中的渣渣,这种算法基本上是没有什么用处的。但是作为一个初学者,我又必须要会写这种算法。这种算法的实现实现思想和它的名字一样,就是在一个范围内选择最大或者最小的数据然后再交换数据实现排序…

Maynor的博客专家成长之路——暨2023年中复盘

文章目录 博客专家成长之路——暨2023年中复盘前言念念不忘的博客专家每天只做三件事敲代码写博客健健身 我的感悟 不足之处未来:和CSDN共同成长最后 博客专家成长之路——暨2023年中复盘 前言 ​ 2023年不知不觉已经过去了半年有余,也是时候作年中复盘…

10.25UEC++/小试牛刀(笨鸟先飞案例)

1.思路整理: 如何入手? 角色可能是每个游戏的最重要的部分,所以一般可以先从角色入手,如果游戏很复杂,可以进行拆分设计。 蓝图创建地图: 创建默认Pawn: 编写GameMode默认构造函数:…

Springboot整合Activiti详解

文章目录 版本依赖配置文件需要注意的问题画流程图activiti服务类进行编写流程部署流程定义启动流程流程实例 测试流程启动流程完成任务受理任务 版本依赖 开发工具 IDEASpringBoot 2.4.5(这里我试过SpringBoot 3.1.1版本,Activiti没有启动,…