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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
Python实现网站注册验证码生成类
Jun 08 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
Python切片工具pillow用法示例
Mar 30 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python实现websocket的客户端压力测试
Jun 25 Python
python实现双人五子棋(终端版)
Dec 30 Python
python 实现逻辑回归
Dec 30 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 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面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
php根据年月获取季度的方法
2014/03/31 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python中快速进行多个字符替换的方法小结
2016/12/15 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python实现自动发送报警监控邮件
2018/06/21 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
python实现计算器功能
2019/10/31 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
土建工程师岗位职责
2014/06/10 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
SQL Server实现分页方法介绍
2022/03/16 SQL Server