业界动态
Django:haystack全文检索详细教程
2024-11-01 23:45

参考:https://blog.csdn.net/AC_hell/article/details/52875927

Django:haystack全文检索详细教程

一、安装第三方库及配置

  1.1  安装插件

  pip install whoosh django-haystack jieba

  • haystack是django的开源搜索框架,该框架支持Solr,Elasticsearch,Whoosh, *Xapian*搜索引擎,不用更改代码,直接切换引擎,减少代码量。

  1.3  settings中增加搜索引擎配置

    为使用的引擎必须要有,如果引擎是,则必须要填写,其为Whoosh 索引文件的存放文件夹。
其他引擎的配置见官方文档

      1、索引,就像书的目录一样,可以快速的导航查找内容。

      2、每个索引里面必须有且只能有一个字段为 document=True,这代表haystack 和搜索引擎将使用此字段的内容作为索引进行检索(primary field)。其他的字段只是附属的属性,方便调用,并不作为检索数据,可以删除掉。

        只要保证ArticlePost_text.txt文件中有需要检索的字段就行了

        {{ object.title }}
	{{ object.author }}
	{{ object.body }}

      3、如果使用一个字段设置了,则一般约定此字段名为,这是在类里面一贯的命名,以防止后台混乱,当然名字你也可以随便改,不过不建议改。   

      4、并且,haystack提供了use_template=True在text字段,这样就允许我们使用数据模板去建立搜索引擎索引的文件,说得通俗点就是索引里面需要存放一些什么东西,例如 ArticlePost的 title 字段,

        这样我们可以通过 title 内容来检索ArticlePost数据了,举个例子,假如你搜索 python ,那么就可以检索出title含有 python 的ArticlePost了,怎么样是不是很简单?

    2.2  新建数据模板路径ArticlePost_text.txt

      数据模板的路径为templates/search/indexes/article/ArticlePost_text.txt注意文件的命名格式,一定要是model_text.txt,其内容为:

      这个数据模板的作用是对这三个字段建立索引,当检索的时候会对这三个字段做全文检索匹配。

    2.3  添加url路由

     在article应用的urls.py中添加路由:url(r'search/$', SearchView(), name='haystack_search'),

    2.4  新建search.html模板文件

      在此位置新建templates/search/search.html,内容为:

        注意一下<a href="?q={{ query }}&page={{ page.next_page_number }}">下一页</a>,这里不要忘了q={{query}参数,如果缺少此参数的话,单击下一页时会跳转至:http://127.0.0.1:8000/article/search/?page=2,

        此时只有page=2参数,代表的是全部文章的第二页。

        分页也可以在settings中配置:

    2.5  增加搜索入口

        在header.html文件中新增一个input搜索框,

          1、input标签的name='q',代表搜索的参数,为固定写法,不能修改为其他值。可以查看一下视图类haystack.views.py中是怎么接受该搜索关键字的

          2、action="{% url 'article:haystack_search' %}",代表输入搜索关键字后单击搜索按钮时submit到上面定义的url中,如:http://127.0.0.1:8000/article/search/?q=领克03

          3、method=“get”代表搜索的关键字以?q=搜索关键字的形式传递后后台

          4、视图类haystack.views.py(可以从url中链接到该类查看)返回的上下文context如下:

          query:搜索的关键字

          page:当前页的page对象

          paginator:分页paginator对象

           上面这三个对象我们已经在search.html搜索结果文件中使用了。

    2.6  重建索引文件、测试

       使用或者使用命令,中间会提示选择,输入y,

         完成后输入地址http://127.0.0.1:8000/article/search/?q=领克,

        注意:第一次搜索【领克】没有搜索到结果,第二次搜索【领克03】搜索出来有结果,这是为什么呢,这是因为whoosh自带的是英文分词,对中文支持不是很好,所以需要使用中文分词工具jieba

        每次数据库更新后都需要更新索引,所以haystack为大家提供了一个接口,只要在settings.py里设置:

三、替换为jieba分词

  3.1  创建

    将文件)拷贝到article这个APP下

    并重命名为,例如article

  3.2  修改settings中搜索引擎

      修改ENGINE参数

    3.3  重建索引,搜索中文测试一下

      建索引:

      重启:python manag.py runserver

      再次搜索关键字:领克

    

四、高亮显示搜索关键词

  原理:

    在博客文章搜索页中我们需要对 title、author和 body 做高亮处理:{% highlight result.object.title with query %},{% highlight result.object.body with query %}。高亮处理的原理其实就是给文本中的关键字包上一个 span 标签并且为其添加 highlighted 样式(当然你也可以修改这个默认行为,具体参见下边给出的用法)。因此我们还要给 highlighted 类指定样式,在 search.html 中添加即可。

  1、首先在search.html文件顶部加载{% load highlight %}

  2、再将对应的{{ result.object.author }}变量替换为:{% highlight result.object.author with query %}

  3、在最后面加上一小段css样式,见文件的最下方

  进阶用法:

    

  最终的文件如下

  

       

        看下效果:

    以上就是本篇文章【Django:haystack全文检索详细教程】的全部内容了,欢迎阅览 ! 文章地址:http://houdi.cs-ej.cn/news/197.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 成事e家移动站 http://houdi.cs-ej.cn/mobile/ , 查看更多   
最新新闻
励志的短篇笑话故事
短篇的故事我们都不需要花费很多的时间去看,那么短篇的笑话故事有哪些呢?下面是小编给大家整理的励志的短篇笑话故事,供大家参
如何设计和实现微信公众号关注后48小时内定时给粉丝自动推送发送图文图片或文本消息?
很多人可能会留意到, 关注了公众号之后,隔一段时间, 公众号会推送消息出来,打开消息后发现这些消息看起来不像人工发送的,应该是
11位79年出生的女明星,你最喜欢哪一个(当然是高圆圆)
1.陈乔恩陈乔恩,1979年4月4日出生于台湾省新竹县竹北市,华语影视女演员、主持人、歌手,2001年9月23日,陈乔恩正式出道,并于
2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装
2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装
你想知道的热梗合集,它来啦!
嘻嘻,网络热梗小雷达——团团上线咯近期热梗热词特别篇新鲜出炉!宝子们快来和团团一起围观吧5G冲浪走起!一谐音梗#达咩网上冲
从四人作品管窥网络诗词不同向度的新变
互联网在中国兴起,应在2000年前后。而所谓网络诗词,即是指以互联网为发表载体的原创诗词,到今天有大约15年历史。与传统纸媒相
抖音粉丝等级价格对照表最新的是什么?粉丝等级怎么快速增长的?
在抖音平台上,粉丝数量和等级是衡量账号影响力的重要指标。许多抖音用户对粉丝等级的价格以及如何快速增长粉丝等级充满好奇。一
如何让百度只收录网站描述内容 如何让百度收录自己的网站
理论上是如果你没有在文件里设置禁止百度蜘蛛爬行的话,百度会自动收录的。但这个收录可能会等很久。所以一般情况下,我们都是采
2021年山东枣庄三支一扶考试笔试成绩查询入口 笔试成绩查询时间
点击进入2021年枣庄三支一扶笔试成绩查询入口【预计10月中旬发布】2021山东三支一扶面试形式什么样?山东三支一扶面试大部分采用
测试行业资讯测试行业资讯测试行业资讯
测试行业资讯测试行业资讯测试行业资讯测试行业资讯测试行业资讯测试行业资讯
本企业新闻