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数据类型转换函数总结
Mar 11 Python
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
python实现简单购物商城
May 21 Python
python读取oracle函数返回值
Jul 18 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
Python 从attribute到property详解
Mar 05 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/09/05 PHP
社区(php&&mysql)一
2006/10/09 PHP
php Undefined index的问题
2009/06/01 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP中使用BigMap实例
2015/03/30 PHP
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jquery操作select大全
2014/04/25 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python中使用asyncio 封装文件读写
2016/09/11 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python程序暂停的正常处理方法
2019/11/07 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
环境科学专业大学生自荐信格式
2013/09/21 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
跳蚤市场口号
2014/06/13 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript