python django使用haystack:全文检索的框架(实例讲解)


Posted in Python onSeptember 27, 2017

haystack:全文检索的框架

whoosh:纯Python编写的全文搜索引擎

jieba:一款免费的中文分词包

首先安装这三个包

pip install django-haystack
pip install whoosh
pip install jieba

1.修改settings.py文件,安装应用haystack,

2.在settings.py文件中配置搜索引擎

HAYSTACK_CONNECTIONS = {
 'default': {
  # 使用whoosh引擎
  'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
  # 索引文件路径
  'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
 }
}
# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

3. 在templates目录下创建“search/indexes/blog/”目录 采用blog应用名字下面创建一个文件blog_text.txt
#指定索引的属性

{{ object.title }}
{{ object.text}}
{{ object.keywords }}

python django使用haystack:全文检索的框架(实例讲解)

4.在需要搜索的应用下面创建search_indexes

from haystack import indexes
from models import Post #指定对于某个类的某些数据建立索引
class GoodsInfoIndex(indexes.SearchIndex, indexes.Indexable): 
 text = indexes.CharField(document=True, use_template=True)
 def get_model(self):  
 return Post #搜索的模型类
 def index_queryset(self, using=None):  
  return self.get_model().objects.all()

python django使用haystack:全文检索的框架(实例讲解)

5.

1. 修改haystack文件

2. 找到虚拟环境py_django下的haystack目录 这个目录根据自己使用的python环境不同,路径也不一样。

3. site-packages/haystack/backends/ 创建一个文件名为ChineseAnalyzer.py文件写入下面代码,用于中文分词

import jieba
from whoosh.analysis import Tokenizer, Token
 class ChineseTokenizer(Tokenizer):
 def __call__(self, value, positions=False, chars=False,
     keeporiginal=False, removestops=True,
     start_pos=0, start_char=0, mode='', **kwargs):
  t = Token(positions, chars, removestops=removestops, mode=mode,
     **kwargs)
  seglist = jieba.cut(value, cut_all=True)
  for w in seglist:
   t.original = t.text = w
   t.boost = 1.0
   if positions:
    t.pos = start_pos + value.find(w)
   if chars:
    t.startchar = start_char + value.find(w)
    t.endchar = start_char + value.find(w) + len(w)
   yield t
 def ChineseAnalyzer():
 return ChineseTokenizer()

6.

1. 复制whoosh_backend.py文件,改为如下名称

whoosh_cn_backend.py

在复制出来的文件中导入中文分词模块

from .ChineseAnalyzer import ChineseAnalyzer

2. 更改词语分析类 改成中文

查找analyzer=StemmingAnalyzer()改为analyzer=ChineseAnalyzer()

7. 最后一步就是建初始化索引数据

python manage.py rebuild_index

8. 创建搜索模板 在templates/indexes/ 创建search.html模板

搜索结果进行分页,视图向模板中传递的上下文如下

query:搜索关键字

page:当前页的page对象

paginator:分页paginator对象

9. 在自己的应用视图中导入模块

from haystack.generic_views import SearchView

定义一个类重写get_context_data 方法,这样就可以往模板中传递自定义的上下文。

class GoodsSearchView(SearchView):
def get_context_data(self, *args, **kwargs):


context = super().get_context_data(*args, **kwargs)


context['iscart']=1


context['qwjs']=2


return context

应用的urls文件中添加这条url 将类当一个视图的方法使用 .as_view()

url('^search/$', views.BlogSearchView.as_view())

以上这篇python django使用haystack:全文检索的框架(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
python 实现多线程下载视频的代码
Nov 15 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python Cartopy的基础使用详解
Nov 01 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
python实现三阶魔方还原的示例代码
Apr 28 Python
Python中json.dumps()函数的使用解析
May 17 Python
如何在C++中调用Python
May 21 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 #Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 #Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 #Python
Python计算斗牛游戏概率算法实例分析
Sep 26 #Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 #Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 #Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 #Python
You might like
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
遍历jquery对象的代码分享
2011/11/02 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
详解jquery和vue对比
2019/04/16 jQuery
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
python邮件发送smtplib使用详解
2020/06/16 Python
python Xpath语法的使用
2020/11/26 Python
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
祖国在我心中演讲稿
2014/01/15 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书