django-haystack,具有全文搜索功能的 Python 库!

目录

前言

安装与配置

全文搜索基础

搜索引擎配置

索引配置

搜索视图与模板

过滤器与排序

自定义搜索逻辑

应用场景

 1. 电子商务网站的商品搜索

 2. 新闻网站的文章搜索

 3. 社交网站的用户搜索

 4.企业内部系统的文档搜索

总结


前言

大家好,今天为大家分享一个非常实用的 Python 库 - django-haystack

Github地址:https://github.com/django-haystack/django-haystack


Django Haystack库是一个用于在Django项目中实现全文搜索功能的强大工具。它集成了各种搜索引擎,如Elasticsearch、Whoosh等,为开发者提供了灵活且高效的搜索解决方案。在本文中,将深入探讨Django Haystack库的安装、配置和应用,以及如何利用其丰富的功能来实现高级全文搜索功能。

安装与配置

首先,看看如何安装和配置Python Django Haystack库:

pip install django-haystack

安装完成后,在Django项目的 settings.py 文件中进行配置:

INSTALLED_APPS = [...'haystack',...
]HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.elasticsearch2_backend.Elasticsearch2SearchEngine','URL': 'http://localhost:9200/','INDEX_NAME': 'haystack',},
}

这样,就完成了Django Haystack库的安装和基本配置。

全文搜索基础

Django Haystack库实现全文搜索的基本原理是将数据索引化并存储到搜索引擎中,然后通过搜索引擎进行搜索查询。

以下是一个简单的数据模型示例:

from django.db import models
from haystack import indexesclass Book(models.Model):title = models.CharField(max_length=255)author = models.CharField(max_length=255)content = models.TextField()class BookIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)title = indexes.CharField(model_attr='title')author = indexes.CharField(model_attr='author')def get_model(self):return Book

在上述示例中,定义了一个Book模型和对应的BookIndex索引,通过使用 use_template=True 来使用模板定义索引字段。

搜索引擎配置

Django Haystack库支持多种搜索引擎,如Elasticsearch、Whoosh等。可以根据项目需求选择合适的搜索引擎并进行配置。

以下是一个使用Elasticsearch搜索引擎的配置示例:

HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.elasticsearch2_backend.Elasticsearch2SearchEngine','URL': 'http://localhost:9200/','INDEX_NAME': 'haystack',},
}

通过这样的配置,可以使用Elasticsearch作为后端搜索引擎来实现全文搜索功能。

索引配置

在Django Haystack库中,可以定义和配置搜索索引来指定需要搜索的字段和权重。

以下是一个索引配置示例:

class BookIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)title = indexes.CharField(model_attr='title')author = indexes.CharField(model_attr='author')def get_model(self):return Bookdef index_queryset(self, using=None):return self.get_model().objects.all()

在这个示例中,定义了text、title和author字段,并通过 use_template=True 来使用模板定义text字段。同时,实现了 index_queryset 方法来指定需要索引的查询集。

搜索视图与模板

在Django Haystack库中,可以通过视图处理搜索请求,并在模板中展示搜索结果。

以下是一个简单的搜索视图和模板示例:

from django.shortcuts import render
from haystack.query import SearchQuerySetdef search(request):query = request.GET.get('q', '')results = SearchQuerySet().filter(text=query)return render(request, 'search_results.html', {'results': results})

在搜索结果模板 search_results.html 中,我们可以展示搜索结果:

{% for result in results %}<h3>{{ result.title }}</h3><p>{{ result.author }}</p><p>{{ result.object.content }}</p>
{% endfor %}

过滤器与排序

Django Haystack库还支持在搜索结果中应用过滤器和排序规则来优化搜索体验。

以下是一个过滤器和排序示例:

from haystack.query import SearchQuerySet# 过滤器示例
filtered_results = SearchQuerySet().filter(author='John Doe')# 排序示例
sorted_results = SearchQuerySet().order_by('-pub_date')

通过这样的过滤器和排序操作,可以对搜索结果进行精确过滤和排序展示。

自定义搜索逻辑

Django Haystack库还允许开发者自定义搜索逻辑和权重,以进一步优化搜索结果的准确性和相关性。

以下是一个自定义搜索逻辑示例:

from haystack.query import SearchQuerySet
from haystack.inputs import Exact# 自定义搜索逻辑示例
custom_results = SearchQuerySet().filter(content=Exact('Python programming'))

通过这样的自定义搜索逻辑,可以针对特定条件进行搜索,并获得更精确的搜索结果。

应用场景

 1. 电子商务网站的商品搜索

描述:电子商务网站通常需要提供强大的商品搜索功能,包括关键词搜索、过滤器、排序等功能。

示例代码:

     # 定义搜索索引class ProductIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)title = indexes.CharField(model_attr='title')category = indexes.CharField(model_attr='category__name')def get_model(self):return Product``````python# 搜索视图class ProductSearchView(SearchView):template_name = 'product_search.html'queryset = Product.objects.filter(status='active')``````html<!-- product_search.html -->{% for result in page.object_list %}<h3>{{ result.object.title }}</h3><p>Category: {{ result.object.category }}</p>{% empty %}<p>No results found.</p>{% endfor %}

 2. 新闻网站的文章搜索

描述:新闻网站需要提供快速、准确的文章搜索功能,帮助用户找到感兴趣的新闻内容。

示例代码:

     # 定义搜索索引class ArticleIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)title = indexes.CharField(model_attr='title')author = indexes.CharField(model_attr='author__name')def get_model(self):return Article
     # 搜索视图class ArticleSearchView(SearchView):template_name = 'article_search.html'queryset = Article.objects.filter(status='published')
     <!-- article_search.html -->{% for result in page.object_list %}<h3>{{ result.object.title }}</h3><p>Author: {{ result.object.author }}</p>{% empty %}<p>No results found.</p>{% endfor %}

 3. 社交网站的用户搜索

描述:社交网站需要提供用户搜索功能,让用户能够找到自己感兴趣的人或组织。

示例代码:

     # 定义搜索索引class UserProfileIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)username = indexes.CharField(model_attr='user__username')bio = indexes.CharField(model_attr='bio')def get_model(self):return UserProfile
     # 搜索视图class UserProfileSearchView(SearchView):template_name = 'user_profile_search.html'queryset = UserProfile.objects.all()``````html<!-- user_profile_search.html -->{% for result in page.object_list %}<h3>{{ result.object.username }}</h3><p>Bio: {{ result.object.bio }}</p>{% empty %}<p>No results found.</p>{% endfor %}

 4.企业内部系统的文档搜索

描述:企业内部系统需要提供文档搜索功能,帮助员工快速查找和访问企业文档资料。

示例代码:

     # 定义搜索索引class DocumentIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)title = indexes.CharField(model_attr='title')category = indexes.CharField(model_attr='category__name')def get_model(self):return Document
     # 搜索视图class DocumentSearchView(SearchView):template_name = 'document_search.html'queryset = Document.objects.filter(status='published')``````html<!-- document_search.html -->{% for result in page.object_list %}<h3>{{ result.object.title }}</h3><p>Category: {{ result.object.category }}</p>{% empty %}<p>No results found.</p>{% endfor %}

总结

Python Django Haystack库是一款强大的全文搜索引擎,适用于各种类型的项目,包括电子商务网站、新闻网站、社交网站和企业内部系统等。通过简单的配置和灵活的API,开发者可以轻松地实现高效的全文搜索功能,包括关键词搜索、过滤器、排序等功能。该库与不同的搜索引擎(如Elasticsearch、Whoosh等)兼容,提供了丰富的搜索索引和视图类,使得开发者能够快速构建可靠的搜索系统,提升用户体验和数据检索效率。总而言之,Python Django Haystack库为开发者提供了一个强大而灵活的工具,用于实现各种项目的全文搜索需求。

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

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

相关文章

详解Qt中使用线程

详解Qt中使用线程 Qt中的线程相关知识涵盖了线程创建、管理、通信以及线程安全等方面。下面将详细讲解这些知识点&#xff0c;并提供对应的示例代码。 线程创建与管理 QThread类 Qt通过QThread类来创建和管理线程。要创建一个新的工作线程&#xff0c;通常有两种方法&#…

【项目新功能开发篇】需求分析和开发设计

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

vue 加 websocket 聊天

<template><div style="height: 100%; width: 100%; background-color: #fff"><div class="wrap"><!-- 头部 --><div class="titleBox"><imgsrc="@/assets/image/avatar.png"style="argin: 10p…

分类预测 | Matlab实现TCN-BiGRU-Mutilhead-Attention时间卷积双向门控循环单元多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现TCN-BiGRU-Mutilhead-Attention时间卷积双向门控循环单元多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现TCN-BiGRU-Mutilhead-Attention时间卷积双向门控循环单元多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序…

Android adb 常用命令

以下是一些常用的adb&#xff08;Android Debug Bridge&#xff09;命令列表&#xff1a; 连接设备&#xff1a; adb devices&#xff1a;列出已连接的 Android 设备。adb connect <设备IP地址>&#xff1a;通过TCP/IP连接到设备。adb disconnect <设备IP地址>&…

SpringBoot多级多模块聚合项目下maven打包报‘packaging‘ with value ‘jar‘ is invalid.

问题场景&#xff1a; SpringBoot多级多模块项目中部分pom文件报红&#xff0c;mvn clean时报错&#xff1a;‘packaging’ with value ‘jar’ is invalid. Aggregator projects require ‘pom’ as packaging. 项目背景 项目是一个多级多模块项目&#xff0c;简单分为&…

【系统架构设计师】- 知识点汇总(易错总结)

—————————————————————————————————— 一、函数依赖的推理规则&#xff1a; 1、自反律&#xff1a;若Y⊆X⊆U&#xff0c;则X→Y在R上成立。 2、增广律&#xff1a;若X→Y在R上成立&#xff0c;且Z⊆U&#xff0c;则XZ→YZ在R上也成立。 3、传…

Vue-Next-Admin:适配手机、平板、PC的开源后台管理模板

摘要&#xff1a;随着移动设备和PC的普及&#xff0c;为了满足不同设备的需求&#xff0c;开发一个能够自适应手机、平板和PC的后台管理系统变得至关重要。本文将介绍一个基于Vue3.x、Typescript、Vite、Element Plus等技术的开源模板库——Vue-Next-Admin&#xff0c;帮助开发…

FebHost:人工智能时代的新宠儿.AI域名

近年来,人工智能技术在各行各业迅猛发展,正在深刻改变着我们的生活。作为AI领域的专属域名,.AI域名正成为越来越多企业和个人的首选。 那么,.AI域名到底是什么呢?它是一种特殊的顶级域名(Top-Level Domain, TLD),于2013年由 安哥拉政府正式退出。与其他通用顶级域名如.com、.…

华为ensp路由器模拟ftp服务器访问

众所周知ensp的pc只有ping功能&#xff0c;ssh、telnet、ftp都无法实现&#xff0c;所以想实现需要更换为路由器 R1需要FTP到server的ftp服务 server的FTP配置就这些命令&#xff0c;主要的是路径&#xff0c;然后在网络可达的情况下就可以进行登录测试了 aaa local-user hu…

uniapp通过蓝牙传输数据 (ios)

在uni-app中&#xff0c;可以通过uni-ble&#xff08;uni-app官方提供的蓝牙插件&#xff09;来实现iOS设备上的蓝牙数据传输。 首先&#xff0c;确保已在uni-app的manifest.json文件中添加uni-ble插件的配置&#xff1a; "permission": { "scope.userLocati…

Windows power shell/cmd/shell/脚本

Windows power shell/cmd/shell/脚本 1、shell shell&#xff1a;shell脚本运行的环境&#xff0c;是一个概念不是特指 shell脚本&#xff1a;shell脚本就是将一系列命令按照一定的顺序保存到一个文本文件中&#xff0c;该文本文件被赋予执行权限&#xff0c;执行时依次执行…

【大模型】大模型 CPU 推理之 llama.cpp

【大模型】大模型 CPU 推理之 llama.cpp llama.cpp安装llama.cppMemory/Disk RequirementsQuantization测试推理下载模型测试 参考 llama.cpp 描述 The main goal of llama.cpp is to enable LLM inference with minimal setup and state-of-the-art performance on a wide var…

unity 使用Base64编码工具对xml json 或者其他文本进行加密 解密

Base64编码加密解密工具 这是一个加密解密的网页工具&#xff0c;别人可以把他加密后的字符串给你&#xff0c;然后你可以用代码解密出来&#xff0c; 或者自己对内容进行加密&#xff0c;解密处理。 /// <summary>/// Base64 解码/// </summary>string DecodeBase…

基于 NGINX 的 ngx_http_geoip2 模块 来禁止国外 IP 访问网站

基于 NGINX 的 ngx_http_geoip2 模块 来禁止国外 IP 访问网站 一、安装 geoip2 扩展依赖 [rootfxkj ~]# yum install libmaxminddb-devel -y二、下载 ngx_http_geoip2_module 模块 [rootfxkj tmp]# git clone https://github.com/leev/ngx_http_geoip2_module.git三、解压模…

55、美国德克萨斯大学奥斯汀分校、钱德拉家族电气与计算机工程系:通过迁移学习解决BCI个体差异性[不得不说,看技术还得是老美]

2024年2月5日跨被试最新文章&#xff1a; 德州州立大学奥斯汀分校研究团队最近的一项研究成果&#xff0c;通过非侵入式的脑机接口&#xff0c;可以让被试不需要任何校准就可以使用脑机接口设备&#xff0c;这意味着脑机接口具备了大规模被使用的潜力。 一般来说&#xff0c;…

02 删改查

文章目录 CartControllerCartMapperCartDButilCartMapper.xmlgeneratorConfig.xmlmybatis-config.xmlcart.jspproducts.jsp(忽略)pom.xml CartController package controller;import mapper.CartMapper; import org.apache.ibatis.session.SqlSession; import pojo.Cart; impor…

UE4 方块排序动画

【动画效果】 入动画&#xff1a; 出动画&#xff1a; 【分析】 入动画&#xff1a;方块动画排序方式为Z字形&#xff0c;堆砌方向为X和Y轴向 出动画&#xff1a;方块动画排序方式为随机 【关键蓝图】 1.构建方块砌体 2.入/出动画

web渗透测试漏洞复现:ZooKeeper未授权漏洞复现

web渗透测试漏洞复现 1. ZooKeeper未授权漏洞复现1.1 ZooKeeper简介1.2 ZooKeeper漏洞复现1.3 ZooKeeper漏洞修复建议1. ZooKeeper未授权漏洞复现 1.1 ZooKeeper简介 ZooKeeper 是一个分布式的、开源的协调服务,最初由雅虎开发,现隶属于 Apache 软件基金会,是Google的Chub…

Java pdfbox 给 PDF 添加文字和图片水印 并旋转45度

POM <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> </dependency> 代码&#xff1a; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdf…