Django_haystack全文搜索

news2025/6/22 22:31:10

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 GoodsSKU


class 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.coloradmin.cn/o/741204.html

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

相关文章

C语言为什么是世界上最难的语言?看完你就明白了

在当前的信息技术领域,C语言在许多大型科技公司中扮演着重要角色,如谷歌、苹果和微软。这些公司不仅开发软件,还专门设计硬件,例如AMD、英传达和英特尔等公司。它们都使用C加速库来提高软件性能。 C语言之所以难以掌握&#xff0…

一个简单不报错的summernote 图片上传案例

一个简单不报错的summernote 图片上传案例 一个比较完整的summernote上传图片的案例,没有后台(上传图片网上案例太多),只有前端js.修正了网上提供的,但是有bug的代码。 这个例子,js保证不报错。亲测可用 …

windows mysql服务自动启动 错误模块名称:ntdll.dll

在windows11家庭版系统安装mysql后,偶尔有mysql服务自动启动失败的问题,大体的原因就是MySQL的启动服务不能在Windows规定的启动时间内完成准备,于是就会停止其启动程序。windows事件日志如下: 方法一 : 检查确定文件…

计算机网络完结篇(从键入网址到响应页面-->HTTP常见面试题-->TCP三次握手及挥手-->TCP超时重传等特性-->Ip地址)

1. 基础篇 从键入网址到响应页面 1. 解析URL 生成HTTP请求信息 解析URL之后,浏览器确定了Web服务器和文件名,然后就是根据信息来生成HTTP请求信息。 2. 真实地址查询 DNS DNS服务器: 在第一步解析URL获取到对应的HTTP请求信息之后&#xf…

React 之 CSS编写方式

一、概述 整个前端已经是组件化的天下,而CSS的设计就不是为组件化而生的,所以在目前组件化的框架中都在需要一种合适的CSS解决方案 在组件化中选择合适的CSS解决方案应该符合以下条件: 可以编写局部css:css具备自己的具备作用域&a…

实现一个vscode插件:打开多个vscode项目时根据.nvmrc文件自动切换nvm

开发背景与最终功能 需要维护一些老项目,同时开发新项目时,切换nvm很烦人 最终实现vscode插件:每个vscode实例打开一个项目,切换vscode实例时能自动切换版本(需要项目根目录有一个.nvmrc文件) 插件下载 …

nextjs13中cssModule设置子标签的样式

前言 最近在学习nextjs中发现,如果在cssModule文件中直接设置子标签的样式比较麻烦,最后在网上看到一种方式可以解决,方式如下。 ps: 此方式不一定最优,因为在我看来此代码耦合性太高了,看着不太舒适,因为…

保姆级指南|APP原型设计怎么做?手把手教学超详细!

在数字化产品研发过程中,原型设计扮演着至关重要的角色。不夸张的说,产品原型很大程度决定了最终产品的成功与否。随着主流产品载体的更迭和发展,原型设计也在不断的演进。也产生了网页原型设计,桌面端app原型设计,移动…

PyTorch模型创建与nn.Module

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 模型创建与nn.Modulenn.Module 总结 模型创建与nn.Module 创建网络模型通常有2个要素: 构建子模块拼接…

Redis 优惠卷秒杀(二) 异步秒杀、基于Stream的消息队列处理

目录 基于Stream的消息队列 Redis优化秒杀 登录头 改进秒杀业务,调高并发性能 Redis消息队列实现异步秒杀 ​编辑基于List结构模拟消息队列 基于PuSub的消息队列 ​编辑 基于Stream的消息队列 Redis消息队列 基于Stream的消息队列 Redis优化秒杀 登录头 改…

skywalking安装

目录 skywalking部署示意图 server安装 裸机安装 docker单节点安装 docker集群安装 k8s安装 helm安装(官方) k8s yaml安装 动态配置安装 client agent安装 skywalking部署示意图 skywalking ui - web界面管理程序oap server - skywalking服务程序nacos - skywalking集…

数字孪生水务系统可视化管理平台有效缓解城市供水压力

针对传统自来水厂供水水质安全隐患大,运行管理落后等问题,基于数字孪生技术构建全厂三维立体模型,在电脑前就可以掌握全厂管线、设备运行情况,遇到预案中的突发事件还可以给出辅助决策方案。从根本上有效提高水厂运行管理效率,增强对水质变化的应对能力,…

分析shein独立站成功的原因

近年来,Shein独立站在快时尚领域声名鹊起,成为许多时尚消费者的首选网站。面对激烈的竞争,它依然能够站稳脚跟并不断壮大。那么,Shein独立站成功的原因是什么呢? Shein独立站——以消费者为中心的运营模式 Shein独立站…

【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化。 Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息。 这个数据结构允许我们在Charts标签页中查看不同时间点的性能指标&#xff0c…

java中使用HttpRequest发送请求调用自己的接口

(539条消息) java中使用HttpRequest发送请求_java httprequest_thankful_chn的博客-CSDN博客 <dependency><groupId>com.github.kevinsawicki</groupId><artifactId>http-request</artifactId><version>5.6</version></dependenc…

华为云-hcip笔记-网络服务规划

华为云-hcip笔记-网络服务规划 网络服务规划 安全组和网络ACL 网络ACL对子网进行防护&#xff0c;安全组是对ECS进行防护。 对等连接VPC peering 两个vpc之间的网络连接&#xff0c;用户可以使用私有ip地址在两个vpc之间进行通信。 同账号中对等连接自动接受&#xff0c;跨…

【JavaEE】JVM的组成及类加载过程

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本文我们主要讲解一下面试中常见的问题&#xff0c;如果想深入了解&#xff0c;请看一下《Java虚拟机规范》这本书 目录 文章目录 一、JVM简介 二、JVM整体组成 2.1 运行时数据区组成 2.2…

【LeetCode周赛】2022上半年题目精选集——数学

文章目录 2183. 统计可以被 K 整除的下标对数目⭐⭐⭐⭐⭐思路——数论&#xff08;一个数乘上另一个数x是k的倍数&#xff0c;x最小是多少&#xff1f;&#xff09;代码1——统计每个数的因子代码2——统计k的因子 2245. 转角路径的乘积中最多能有几个尾随零思路&#xff08;因…

探索全球市场:初创品牌海外营销策略解析

​随着全球化进程的不断推进&#xff0c;越来越多的初创品牌意识到海外市场的巨大潜力&#xff0c;并希望能够将自己的品牌推广到更广阔的国际舞台上。然而&#xff0c;对于初创品牌来说&#xff0c;进军海外市场并开展品牌营销是一项具有挑战性的任务。本文Nox聚星将介绍一些初…

百变探影器 - 是一款很多人都在用的剪辑软件

有没有一款剪辑软件&#xff0c;它不仅颜值高&#xff0c;不用花时间学习就会剪&#xff0c;还自带丰富转场、片头片尾、字幕模板呢&#xff1f;那不得不说的就是一款超级能打的国产剪辑软件—百变探影器软件。 Pr这些比较专业的剪辑软件&#xff0c;基本都需要拥有一定的剪辑…