参考:https://blog.csdn.net/AC_hell/article/details/52875927
一、安装第三方库及配置
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/ , 查看更多