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实时获取cmd的输出
Dec 13 Python
Python中内建函数的简单用法说明
May 05 Python
Python 操作文件的基本方法总结
Aug 10 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
python字符串常用方法
Jun 14 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
python读出当前时间精度到秒的代码
Jul 05 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python:type、object、class与内置类型实例
Dec 25 Python
Python list和str互转的实现示例
Nov 16 Python
PyTorch device与cuda.device用法
Apr 03 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生成HTML静态页面实例代码
2008/08/31 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
微信支付开发发货通知实例
2016/07/12 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
extjs render 用法介绍
2013/09/11 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
Python切换pip安装源的方法详解
2016/11/18 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python切片工具pillow用法示例
2018/03/30 Python
python实现扫描ip地址的小程序
2019/04/16 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
mysql有关权限的表都有哪几个
2015/04/22 面试题
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
幼儿教师培训感言
2014/03/08 职场文书
网络管理员岗位职责
2014/03/17 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书