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中的闭包总结
Sep 18 Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
Python单例模式实例详解
Mar 01 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
python 搜索大文件的实例代码
Jul 08 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 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新手上路(二)
2006/10/09 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
JS文本框不能输入空格验证方法
2013/03/19 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
消防应急演练方案
2014/02/12 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
工作证明英文模板
2014/10/21 职场文书
留学推荐信英文范文
2015/03/26 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书