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 Queue模块详解
Nov 30 Python
Python中的tuple元组详细介绍
Feb 02 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
对python中的argv和argc使用详解
Dec 15 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
python super的使用方法及实例详解
Sep 25 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
Python基于Opencv识别两张相似图片
Apr 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
Php获取金书网的书名的实现代码
2010/06/11 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP序列化操作方法分析
2016/09/28 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python中获取对象信息的方法
2015/04/27 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
资产经营总监岗位职责
2013/12/04 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
商场活动策划方案
2014/01/24 职场文书
高中班主任评语大全
2014/04/25 职场文书
村班子对照检查材料
2014/08/18 职场文书
成绩报告单家长评语
2014/12/30 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android