Django搜索排序

这篇具有很好参考价值的文章主要介绍了Django搜索排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Django提供了一个SearchQuery类把查询词转换为一个搜索查询对象。

使用全文搜索的实例,根据查询词出现的频率和它们之间的距离对结果进行排序。

关于全文搜索更多内容,请看Django全文搜索-CSDN博客

相关性排序

编辑views.py,添加以下导入

from django.contrib.postgres.search import SearchVector,SearchQuery,SearchRank

找到post_search

            results = Post.objects.annotate(
                search = SearchVector('title','body'),
             ).filter(search=query)

替换为

             search_vector = SearchVector('title','body')
             search_query = SearchQuery(query)
             results = Post.objects.annotate(
                 search = search_vector,
                 rank = SearchRank(search_vector,search_query)
             ).filter(search=search_query).order_by('-rank')

创建一个SearchQuery对象,通过它过滤结果,并使用SearchRank按相关性对结果排序。

  • SearchVector:在哪里查询
  • SearchQuery:查询词是什么
  • SearchRank:如何排序

权重排序

在按相关性排序结果时赋予它们更多权重。
例如,按标题而不是按内容匹配的帖子提供更多相关性。
编辑views.py

            search_vector = SearchVector('title',weight='A') + SearchVector('body',weight='B')
            search_query = SearchQuery(query)
            results = Post.objects.annotate(
                search = search_vector,
                rank = SearchRank(search_vector,search_query)
            ).filter(rank__gte=0.3).order_by('-rank')

使用title和body字段构建的搜索向量应用了不同的权重。
默认权值为D(0.1),C(0.2),B(0.4),A(1.0)
示例对标题的搜索权重为1,对正文的权重为0.4。所以标题匹配讲优先于正文匹配。
对结果进行过滤,只显示排名高于0.3的结果。

最终查询方法代码示例



def post_search(request):
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            query = form.cleaned_data['query']
            
            search_vector = SearchVector('title',weight='A') + SearchVector('body',weight='B')
            search_query = SearchQuery(query)
            results = Post.objects.annotate(
                search = search_vector,
                rank = SearchRank(search_vector,search_query)
            ).filter(rank__gte=0.3).order_by('-rank')
    template = "blog/post/search.html"
    context={
        'form':form,
        'query':query,
        'results':results,
    }
    return render(request,template,context)

关于全文搜索的表单类,模版和路径的构建,请查看Django全文搜索-CSDN博客文章来源地址https://www.toymoban.com/news/detail-813048.html

到了这里,关于Django搜索排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django系列之DRF搜索和过滤

    1. model之间关系 2. DRF搜索 在DRF中使用搜索功能,只需要在 viewsets 视图类中定义 filter_backends 和 search_fields 即可使用。 filter_backends :后端使用的搜索和过滤类。 search_fields :要执行搜索条件的字段,搜索为模糊查询(要在哪些字段上执行模糊查询,支持多表连表查询)。 对应

    2024年02月07日
    浏览(41)
  • 43--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-课程详情页面、搜索页面以及后台设计

    1.视频播放功能 下载第三方插件:vue-video-player 使用步骤: 第一步: cnpm install vue-video-player 第二步:在main.js中引入

    2024年02月09日
    浏览(55)
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索、更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回。 这个操作类似于数据库中 if elif else 的逻辑。 以下是本篇笔记的目录: model 和数据准备 When 和

    2023年04月13日
    浏览(69)
  • 【python】Django——django简介、django安装、创建项目、快速上手

    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django 是一个高效、功能强大的 Web 应用程序框架,采用 Python 编写

    2024年02月20日
    浏览(54)
  • python的安装,Django的安装,Pycharm新建Django项目

    官网:https://www.python.org 官网–downloads–windows–选择对应的版本下载.exe文件 双击运行下载的安装包,按步骤进行安装 ①选择安装方式 install now,会直接默认安装到C盘中; customize installation,自定义安装,可以自行选择安装的位置 PS:无论选择哪种方式,都要记得勾选最底下

    2024年02月21日
    浏览(47)
  • Django笔记四十之运行Django环境的python脚本

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十之运行Django环境的python脚本 这一篇笔记介绍如何在 Django 中运行脚本。 假设说我们要实现一个功能,需要获取 blog.models.Blog 这张表里的总数且使用 print() 输出。 如果代码逻辑很短,且是一次性执行的操作,我们可以在系

    2024年02月04日
    浏览(46)
  • windows解决python安装django架构没有django-admin命令

    目录 一.尝试安装与配置 1.直接pip命令安装 2.用pycharm测试 3.官网下包安装 二.解决 1.找到django安装的路径 2.配置系统变量 3.测试创建项目 3.1.执行访问页面 3.2.解决 3.3.继续测试 4.pycharm打开     新建项目测试    注:发现没有django这个框架选项,后面发现这个功能只有专业版才

    2024年02月06日
    浏览(54)
  • 一周学会Django5 Python Web开发-Django5路由定义

    锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计22条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、

    2024年02月19日
    浏览(53)
  • python - Django创建项目

    根目录下运行命令:    python manage.py runserver 直接使用 Pycharm 创建项目 django-admin startproject mysite     这样就会在当前目录下创建一个叫做 mysite 的Django项目。     可以看到Django自动帮我们创建了一个mysite文件夹,这是项目的根目录。在mysite根目录中,又有一个mysite目录,

    2024年04月11日
    浏览(41)
  • [Python]Django简介

    系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 官方网站 GitHub源码 Django,发音为 [dʒæŋɡəʊ] 。 Django的主要目的是简便、快速的开发数据库驱动的网站。 Django强调代码复用,多个组件可以很方便的以\\\"插件\\\"形式服务

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包