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浅拷贝、深拷贝及引用机制
Dec 15 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python人民币小写转大写辅助工具
Jun 20 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
Python通用函数实现数组计算的方法
Jun 13 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
Python代码需要缩进吗
Jul 01 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
Python读取图像并显示灰度图的实现
Dec 01 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
树结构之JavaScript
2017/01/24 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
在Python中使用SQLite的简单教程
2015/04/29 Python
python实现网站的模拟登录
2016/01/04 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python3下载抖音视频的完整代码
2019/06/05 Python
linux面试题参考答案(8)
2016/04/19 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
简易版租房协议书范本
2014/10/13 职场文书
工作感言一句话
2015/08/01 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书