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 相关文章推荐
以windows service方式运行Python程序的方法
Jun 03 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
详解Python基础random模块随机数的生成
Mar 23 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
基于python3的socket聊天编程
Feb 17 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
python3实现飞机大战
Nov 29 Python
用python读取xlsx文件
Dec 17 Python
关于Python使用turtle库画任意图的问题
Apr 01 Python
Python实现双向链表基本操作
May 25 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图片加水印原理(超简单的实例代码)
2013/01/18 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
javascript中 try catch用法
2015/08/16 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
pandas实现选取特定索引的行
2018/04/20 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
python 魔法函数实例及解析
2019/09/25 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
如何利用Python写个坦克大战
2020/11/18 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
医药大学生求职简历的自我评价
2013/10/17 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
学习计划书怎么写
2014/09/15 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python