首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django Haystack 全文检索与关键词高亮

对于一个搜索引擎来说,至少应该能够根据用户搜索关键词搜索结果进行排序以及高亮关键字。现在我们就来使用 django-haystack 实现这些特性。...Post.title、Post.body 这两个字段建立索引,当检索时候会对这两个字段做全文检索匹配,然后将匹配结果排序后作为搜索结果返回。...page 对象,所以我们从 page 取出这一页对应搜索结果,然后其循环显示,即 {% for result in page.object_list %}。...另外要取得 Post(文章)以显示文章数据标题、正文,需要从 result object 属性获取。query 变量值即为用户搜索关键词。...高亮关键词 注意到百度搜索结果页面,含有用户搜索关键词地方都是被标红,在 django haystack 实现这个效果也非常简单,只需要使用 {% highlight %} 模板标签即可,其用法如下

2.1K80

Django之Model操作数据库详解

Django ORM框架功能: 建立模型类和表之间对应关系,允许我们通过面向对象方式来操作数据库。 根据设计模型类生成数据库表格。 通过方便配置就可以进行数据库切换。...Admin该字段提示信息 choices Admin显示选择框内容,用不变动数据放在内存从而避免跨表操作 :gf = models.IntegerField...查询结果排序 reverse() 查询结果反向排序 distinct() 从返回结果剔除重复记录 values_list(*field...类ordering属性QuerySet对象进行排序     Student.objects.filter(school="阳关小学").order_by('-age', 'name')    ...Q Q对象可以对关键字参数进行封装,从而更好应用多个查询 #查询table2表以"aaa"开头所有的title列 q1=table2.objects.filter(Q(title__startswith

7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    简单全文搜索

    当用户输入某个关键词进行搜索,我们希望为用户显示标题和正文中含有被搜索关键词全部文章。...整个搜索过程如下: 用户在搜素框输入搜索关键词,假设为 “django”,然后用户点击了搜索按钮提交其输入结果到服务器。...此外我们这里从 from django.db.models 引入了一个新东西:Q 对象。Q 对象用于包装查询表达式,其作用是为了提供复杂查询逻辑。...渲染搜索结果 接下来就是渲染搜索结果页面,这里我们复用了 index.html 模板,唯一需要修改地方就是当有错误信息时,index.html 应该显示错误信息。...使用它我们可以实现更加复杂搜索功能,比如全文检索、按搜索相关度排序关键字高亮等等类似于百度搜索功能,功能十分强大。

    1.9K60

    Django 博客实现简单全文搜索

    现在我们来为我们博客提供一个简单搜索功能。 概述 博客文章通常包含标题和正文两个部分。当用户输入某个关键词进行搜索,我们希望为用户显示标题和正文中含有被搜索关键词全部文章。...整个搜索过程如下: 用户在搜素框输入搜索关键词,假设为 “django”,然后用户点击了搜索按钮提交其输入结果到服务器。..." required> name 属性,当用户在这个 input 输入搜索内容并提交表单,键入数据会以键值形式提交服务器,这个键名字就是通过 name 属性指定。...此外我们这里从 from django.db.models 引入了一个新东西:Q 对象。Q 对象用于包装查询表达式,其作用是为了提供复杂查询逻辑。...使用它我们可以实现更加复杂搜索功能,比如全文检索、按搜索相关度排序关键字高亮等等类似于百度搜索功能,功能十分强大。

    70220

    django 实现简单搜索功能

    当用户输入某个关键词进行搜索,我们希望为用户显示标题中含有被搜索关键词全部文章。...整个搜索过程如下: 用户在搜素框输入搜索关键词,假设为 “django”,然后用户点击了搜索按钮提交其输入结果到服务器 服务器接收到用户输入搜索关键词 “django” 后去数据库查找文章标题中含有该关键词全部文章...用户输入了搜索关键词并点击了搜索按钮,数据就被发送给了 django 后台服务器。表单 action 属性值为 /search/,表明用户提交结果将被发送给 /search/ 这个 URL。...这里过滤条件是 title__icontains=q,即 title 包含(contains)关键字 q,前缀 i 表示不区分大小写。...使用它我们可以实现更加复杂搜索功能,比如全文检索、按搜索相关度排序关键字高亮等等类似于百度搜索功能,功能十分强大。

    12.4K80

    第 11 篇:基于 drf-haystack 文章搜索接口

    现在万事具备了,数据库已经有了文章,搜索服务已经有了文章索引,只需要等待客户端来进行查询,然后返回结果。...text=key-word 将 key-word 替换为需要搜索关键字,例如将其替换为 markdown,测试集数据得到搜索结果如下: 搜索结果符合预期,但略微有一点不太好地方,就是没有高亮标题和摘要...,优化了文章标题被从关键字位置截断问题,因此我们使用改造辅助类来需要高亮结果进行处理。...回顾一下序列化器序列化字段,其实也是接收某个字段值作为输入,进行处理,将其转化为可序列化结果输出,和我们需要逻辑很像。...summary 是我们新增字段,注意我们序列化对象是文章 Post,但这个对象是没有 summary 这个属性,但是 summary 其实是属性 body 序列化结果,因此我们通过指定序列化化字段

    1.6K20

    Django Admin后台管理

    http://127.0.0.1:8000/admin/ 输入之前创建超级管理员账号密码进行登陆。...登陆就会看到我们注册模型类,点进去就可以实现对数据库CURD了。 4.自定义管理页面 Django提供了自定义管理页面的功能,是通过自定义模型管理类来实现。...添加get_name方法 list_display = ['id', 'name', 'addr', 'get_name'] 显示效果如下 注:属性列在后台管理页面是可以进行排序,而方法列是不能排序...右侧过滤器,会将对应字段值列出来,用于快速过滤,通过list_filters属性设置。上方搜索框,用于指定字段进行搜索,支持模糊查询,通过search_fields属性进行设置。...5.其他 富文本编辑器 后台管理员如果需要在后台编辑带样式文字,编辑商品详细信息描述,就需要使用富文本编辑器。这里以tinymce为例在Django Admin后台中如何使用富文本编辑器。

    2.8K10

    python自测100题「建议收藏」

    深拷贝就是将一个对象拷贝到另一个对象,这意味着如果你一个对象拷贝做出改变时,不会影响原对象。...第二种方法,唯一必须重写方法是run()。 Q18.如何在python中使用三元运算符? Ternary运算符是用于显示条件语句运算符。这包含true或false值,并且必须为其评估语句。...以下代码可用于在Python列表进行排序: list = [“1”, “4”, “0”, “6”, “9”] list = [int(i) for i in list] list.sort() print...Q79.解释如何在Django设置数据库 Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统。...Q83.列出Django继承样式 在Django,有三种可能继承样式: 抽象基类:当你只希望父类包含而你不想为每个子模型键入信息时使用; 多表继承:现有模型进行子类化,并且需要每个模型都有自己数据库表

    5.8K20

    python自测100题

    深拷贝就是将一个对象拷贝到另一个对象,这意味着如果你一个对象拷贝做出改变时,不会影响原对象。...第二种方法,唯一必须重写方法是run()。 Q18.如何在python中使用三元运算符? Ternary运算符是用于显示条件语句运算符。这包含true或false值,并且必须为其评估语句。...以下代码可用于在Python列表进行排序: list = ["1", "4", "0", "6", "9"] list = [int(i) for i in list] list.sort() print...Q79.解释如何在Django设置数据库 Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统。...Q83.列出Django继承样式 在Django,有三种可能继承样式: 抽象基类:当你只希望父类包含而你不想为每个子模型键入信息时使用; 多表继承:现有模型进行子类化,并且需要每个模型都有自己数据库表

    4.7K10

    【16】进大厂必须掌握面试题-100个python面试

    Python没有访问说明(C ++public,private)。 在Python,函数是一流对象。这意味着可以将它们分配给变量,从其他函数返回并传递给函数。...Help()函数:help()函数用于显示文档字符串,还可以帮助您查看与模块,关键字,属性等有关帮助。 Dir()函数:dir()函数用于显示定义符号。 Q35。...如何在python中使用三元运算符? 答案: 三元运算符是用于显示条件语句运算符。它由true或false值以及必须其评估语句组成。...Monkey_f() MyClass f()行为进行了一些更改。...回答: 以下代码可用于在Python列表进行排序: list = ["1", "4", "0", "6", "9"] list = [int(i) for i in list] list.sort(

    16.4K30

    使用django-haystack实现全文检索

    submit到上面定义url:http://127.0.0.1:8000/article/search/?...q=搜索关键字形式传递后台           4、视图类haystack.views.py(可以从url链接到该类查看)返回上下文context如下: def get_context(self...          page:当前页page对象           paginator:分页paginator对象           上面这三个对象我们已经在search.html搜索结果文件中使用了...注意:第一次搜索【领克】没有搜索结果,第二次搜索【领克03】搜索出来有结果,这是为什么呢,这是因为whoosh自带是英文分词,中文支持不是很好,所以需要使用中文分词工具jieba         ...五、后续优化  5.1  高亮显示搜索关键字 √   5.2  统计搜索条目数 https://www.cnblogs.com/xuaijun/p/8027606.html https://www.zmrenwu.com

    1.2K30

    Django Haystack 全文检索与关键词高亮

    对于一个搜索引擎来说,至少应该能够根据用户搜索关键词搜索结果进行排序以及高亮关键字。现在我们就来使用 django-haystack 实现这些特性。...Post.title、Post.body 这两个字段建立索引,当检索时候会对这两个字段做全文检索匹配,然后将匹配结果排序后作为搜索结果返回。...page 对象,所以我们从 page 取出这一页对应搜索结果,然后其循环显示,即 {% for result in page.object_list %}。...另外要取得 Post(文章)以显示文章数据标题、正文,需要从 result object 属性获取。query 变量值即为用户搜索关键词。...但是体验下来会发现搜索结果并不是很友好,很多关键词文章命名存在但搜索结果却没有显示,原因是 haystack 专门为英文搜索设计,如果使用其默认搜索引擎分词器,中文搜索结果就不是很理想,接下来我们来将它默认分词器设置为中文分词器

    97430

    django 1.8 官方文档翻译: 1-2-2 编写你第一个Django应用,第2部分

    这样的话你就需要在注册对象 时告诉 Django 对应配置。 让我们来看看如何在编辑表单上给字段重新排序。...使用了 TabularInline (而不是 StackedInline) ,基于表格式下相关 对象显示更紧凑了: 需要注意是有个额外 “Delete?”...下面是现在样子: 默认情况下, Django 显示是每个对象 str() 结果。但是若是我们能够 显示每个字段的话有时会更有帮助。...list_display = ('question', 'pub_date', 'was_published_recently') 现在 poll 变更列表页看起来像这样: 你可以点击列标题这些值进行排序...默认情况下每一页显示 100 条记录。 Change-list 分页,搜索框,筛选,日期分层和列标题排序如你所原地在一起运行了。

    2.5K40

    你想要Python面试都在这里了【315+道题】

    61、是否使用过functools函数?其作用是什么? 62、列举面向对象带爽下划线特殊方法,:__new__、__init__ 63、如何判断是函数还是方法?...26、redis数据库默认是多少个db 及作用? 27、python操作redis模块? 28、如果redis某个列表数据量非常大,如果实现循环显示每一个值?...并使用jQuery和XMLHttpRequest对象实现一个ajax请求。 7、如何在前端实现轮训? 8、如何在前端实现长轮训? 9、vuex作用? 10、vue路由拦截器作用?...109、简述 RabbitMQ、Kafka、ZeroMQ区别? 110、RabbitMQ如何在消费者获取任务未处理完前就挂掉时,保证数据不丢失? 111、RabbitMQ如何对消息做持久化?...127、scrapy如何进行自定制命令? 128、scrapy如何实现记录爬虫深度? 129、scrapypipelines工作原理?

    4.5K20

    Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤

    但是从代码可以看到: 通过在新建列表、其元素为单个商品信息组成字典,一个一个地添加,显得很麻烦,可进行改进; 有些字段不能直接用json.dumps()方法序列化,datetime,会报错,商品列表视图修改为如下时...显然,在传入price_min参数显示到前端数据量也会发生变化。...显然,实现了搜索,在给定字段搜索,匹配到关键字则展示到前台。...还可以通过在字段前面加上各种字符来限制搜索行为search_fields: '^'开始搜索 '='完全匹配 '@'全文搜索(当前仅支持DjangoMySQL后端) '$'正则表达式搜索 修改如下:...排序使用 一般需要对商品根据销量、价格等排序,通常使用DRFOrderingFilter类,它支持简单查询参数控制结果排序

    5.3K20

    Python3面试--300题

    61、是否使用过functools函数?其作用是什么? 62、列举面向对象带爽下划线特殊方法,:__new__、__init__ 63、如何判断是函数还是方法?...26、redis数据库默认是多少个db 及作用? 27、python操作redis模块? 28、如果redis某个列表数据量非常大,如果实现循环显示每一个值?...并使用jQuery和XMLHttpRequest对象实现一个ajax请求。 7、如何在前端实现轮训? 8、如何在前端实现长轮训? 9、vuex作用? 10、vue路由拦截器作用?...109、简述 RabbitMQ、Kafka、ZeroMQ区别? 110、RabbitMQ如何在消费者获取任务未处理完前就挂掉时,保证数据不丢失? 111、RabbitMQ如何对消息做持久化?...127、scrapy如何进行自定制命令? 128、scrapy如何实现记录爬虫深度? 129、scrapypipelines工作原理?

    3.7K10

    315道Python面试题,欢迎挑战!

    61、是否使用过functools函数?其作用是什么? 62、列举面向对象带爽下划线特殊方法,:__new__、__init__ 63、如何判断是函数还是方法?...26、redis数据库默认是多少个db 及作用? 27、python操作redis模块? 28、如果redis某个列表数据量非常大,如果实现循环显示每一个值?...并使用jQuery和XMLHttpRequest对象实现一个ajax请求。 7、如何在前端实现轮训? 8、如何在前端实现长轮训? 9、vuex作用? 10、vue路由拦截器作用?...109、简述 RabbitMQ、Kafka、ZeroMQ区别? 110、RabbitMQ如何在消费者获取任务未处理完前就挂掉时,保证数据不丢失? 111、RabbitMQ如何对消息做持久化?...127、scrapy如何进行自定制命令? 128、scrapy如何实现记录爬虫深度? 129、scrapypipelines工作原理?

    3.4K30

    35.Django2.0文档

    该层处理与表现相关决定: 如何在页面或其他类型文档中进行显示。   V:代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板相关逻辑。 你可以把它看作模型与模板之间桥梁。  ...所以,如果结果是多个对象,会导致抛出异常: ? 如果查询没有返回结果也会抛出异常:  6.数据排序 在运行前面的例子,你可能已经注意到返回结果是无序。...我们还没有告诉数据库 怎样结果进行排序,所以我们返回结果是无序。 在你 Django 应用,你或许希望根据某字段检索结果排序,比如说,按字母顺序。...我们可以对任意字段进行排序,如果需要以多个字段为标准进行排序(第二个字段会在第一个字段值相同情况下被使用到),使用多个参数就可以了,如下: ?...我们还可以指定逆向排序,在前面加一个减号‐前缀: ? 限制返回数据 ? 7.更新和删除对象 update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录。

    11.3K100

    django模型

    每个模型 应数据库唯一一张表 如何编写模型 模型:每个模型都用一个类表示,该类继承自django.db.models.Model。...使用关键字参数实例化模型实例来创建一个对象,然后调用save() 把它保存到数据库。...最后结果仍然是一个查询集,它包含标题以”What“开 头、发布日期在2005年1月30日至当天之间所有记录 过滤查询集是独立 每次你筛选一个查询集,得到都是全新另一个查询集,它和之前查询集之间没有任何绑...指定显示列 values(返回一个列表) 返回一个ValuesQuerySet——QuerySet一个子类,迭代时返回字典而不是模型实例 象。...如果您在某些情 况下使用查询集结果,当您最初获取数据时不知道是否需要这些特定字段,可以告诉 Django不要从数据库检索它们。

    3.1K20

    Django 3.1 官网学习路线

    这个强大特性允许您在只修改单个文件同时项目的 URL 模式进行全局更改。 当您熟悉了基本请求和响应流,请阅读本教程第 2 部分,开始使用数据库。...不同模型字段类型(DateTimeField、CharField)对应于适当 HTML 输入小部件。每种类型字段都知道如何在 Django 管理显示自己。...在我们投票应用程序,我们将有以下四个视图: 问题“索引”页面-显示最近几个问题。 问题“细节”页面-显示一个问题文本,没有结果,但有一个表格来投票。 问题“结果”页面-显示特定问题结果。...标题除外,因为不支持按任意方法输出进行排序。...更改列表分页、搜索框、过滤器、日期层次结构和列标题排序都像您认为那样协同工作。

    8.2K10
    领券