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的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多…

你的隐私被泄漏了吗

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

[数据挖掘] 数据分析的八种方法

一、说明 不 同类型的数据分析包括描述性、诊断性、探索性、推理性、预测性、因果性、机械性和规范性。以下是您需要了解的有关每个的信息。本文对于前人归纳的8种进行叙述。 二、数据分析有哪些不同类型? 2.1 分析目的不同 基本存在8个方面:数据分析可以…

【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…

吴恩达机器学习2022-Jupyter-用scikitlearn实现逻辑回归

1.1目标 使用 scikit-learn 培训 Logit模型模型。 1.2数据集 import numpy as npX np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]]) y np.array([0, 0, 0, 1, 1, 1]) 1.3Fit模型 下面的代码导入了 scikit-learn 的 Logit模型模型。您可以通过调…

F#奇妙游(13):代码风格

F# 代码风格 这玩意有两点不能忘记,第一点这是很高级的内容,不要相信那些要求你一开始学习F#就要这样就要那样;第二点,这些内容根据不同的项目和不同的组织时时长变动的,并没有什么一定要遵循的准则。基于这两点认知&…

在centos7系统源码安装nginx+mysql+php+go

以下安装说明仅供参考,请根据实际情况修改配置,进行软件编译安装 软件安装也可以参考阿里云的"建站教程": 云服务器ECS自助建站的流程_云服务器 ECS-阿里云帮助中心 ssl证书配置参考: SSL 证书 Nginx 服务器 SSL 证书安…

Android S 修改关于手机的logo

1.让图片加载生效 frameworks/base/packages/SettingsLib/LayoutPreference/res/layout/preference_about_phone.xml <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:id"id/entity_header" style"…

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

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

使用华为scanplus崩溃的问题

今天接手了一个新的项目&#xff0c;这个项目使用的二维码扫描不是zXin的是一个以前没接触过的华为的scanplus&#xff0c;但是该功能一打开就崩溃了看了下错误日志没有具体的信息&#xff0c;推测是底层崩了&#xff0c;后来在日志中发现了这样的日志 java.lang.SecurityExcep…

Tomcat之配置文件详解

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

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

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