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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
Python最基本的数据类型以及对元组的介绍
Apr 14 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
Python模块 _winreg操作注册表
Feb 05 Python
python3.6使用SMTP协议发送邮件
May 20 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
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
Python中logging模块的用法实例
2014/09/29 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
python二进制文件的转译详解
2019/07/03 Python
python实现XML解析的方法解析
2019/11/16 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
美国网上订购鲜花:FTD
2016/09/23 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
质检员岗位职责
2013/12/17 职场文书
新领导上任欢迎词
2014/01/13 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis