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输出一个杨辉三角的例子
Jun 13 Python
在Python中使用异步Socket编程性能测试
Jun 25 Python
Python中pygame安装方法图文详解
Nov 11 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
Python实现的凯撒密码算法示例
Apr 12 Python
python读取文本绘制动态速度曲线
Jun 21 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
python excel转换csv代码实例
Aug 26 Python
python实现根据文件格式分类
Oct 31 Python
python [:3] 实现提取数组中的数
Nov 27 Python
sklearn-SVC实现与类参数详解
Dec 10 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 meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Node.js中DNS模块学习总结
2018/02/28 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python内置函数之filter map reduce介绍
2014/11/30 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
PHP统计代码行数的小代码
2019/09/19 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
信息管理应届生求职信
2014/03/07 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
毕业生见习报告总结
2014/11/08 职场文书
大学毕业生个人总结
2015/02/28 职场文书