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实现的一个简单LRU cache
Sep 26 Python
Python中字典和JSON互转操作实例
Jan 19 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
python如何使用unittest测试接口
Apr 04 Python
Python检查ping终端的方法
Jan 26 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
python isinstance函数用法详解
Feb 13 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 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
一个捕获函数输出的函数
2007/02/14 PHP
php str_replace的替换漏洞
2008/03/15 PHP
php数组总结篇(一)
2008/09/30 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
Python模块的加载讲解
2019/01/15 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
python numpy中cumsum的用法详解
2019/10/17 Python
Django框架表单操作实例分析
2019/11/04 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
政治表现评语
2014/05/04 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
2014年保管员工作总结
2014/11/18 职场文书
挂职个人工作总结
2015/03/05 职场文书
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python