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脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
python中Switch/Case实现的示例代码
Nov 09 Python
Python random模块用法解析及简单示例
Dec 18 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
Python中collections模块的基本使用教程
Dec 07 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python else语句在循环中的运用详解
Jul 06 Python
django form和field具体方法和属性说明
Jul 09 Python
Pandas自定义选项option设置
Jul 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
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
php 多文件上传的实现实例
2016/10/23 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
python之yield表达式学习
2014/09/02 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
使用Python构造hive insert语句说明
2020/06/06 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
区域销售经理职责
2013/12/22 职场文书
一夜的工作教学反思
2014/02/08 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2014年班主任工作总结
2014/11/08 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
晚会闭幕词
2015/01/28 职场文书
商务邀请函
2015/01/30 职场文书
学生检讨书范文
2019/06/24 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python