原创投稿 | 如何为Django添加中文搜索服务

云豆贴心提醒,本文阅读时间7分钟

在使用python的过程中,必然会设计到如何创建web应用,而搜索功能却最为常见,该文档包含了如何整合haystack,elasticsearch、ik中文分词到django应用中。

测试应用版本

安装

python包安装

elasticsearch安装

elasticsearch基于java,所以需要先安装java。

elasticsearch-analysis-ik安装

安装maven

注意安装必须使用对应的版本,测试也是如此,比如此处使用1.9.5版本。

下载,安装elasticsearch-analysis-ik

注意 在使用中不用刻意选择高版本的elasticsearch,可以有效避免版本不兼容。

另外一定要注意你使用的elasticsearch版本是否和elasticsearch-analysis-ik对应。

开始使用

简单版本

使用whoosh作为后端索引存储(基于文件系统),该操作参考官方文档即可。

加入中文的支持

1、将文件haystack中的whoosh_backend.py(该文件路径为python安装路径下/lib/python2.7.6/site-packages/haystack/backends/whoosh_backend.py)拷贝到你创建的应用下面,并重命名为whoosh_cn_backend.py,例如blog/whoosh_cn_backend.py。 编辑blog/whoosh_cn_backend.py导入中文分析库ChineseAnalyzer

修改blog/whoosh_cn_backend.py大概163行位置

2、在settings.py中修改之前使用的默认的whooshEngine为修改后的WhooshEngine。

3、重建索引python manage.py rebuild_index,在进行搜索中文试试吧。

注意索引的自动更新:

默认索引没有自动更新,那么每当有新数据添加到数据库,就要手动执行update_index命令是不科学的。

自动更新索引的最简单方法在settings.py添加一个信号。

升级版本

由于whoosh是基于文件系统的,所有在索引数据量过大时必然引起性能问题。

从官方描述也可以看得出Whoosh is pure Python, so it’s a great option for getting started quickly and for development, though it does work for small scale live deployments。

需要提前安装好elasticsearch和elasticsearch-analysis-ik,并通过测试。 在之前的项目的基础上修改settings.py 前:

创建索引名

如果rebuild_index中出错,请仔细查看出错日志。

部分代码

urls.py:

views.py:

总结:

通过对比两种方式,可以发现:

whoosh使用jieba分词做处理,然后基于文件存储。

elasticsearch使用ik分词作为插件,提供中文分词的能力,haystack通过下层抽象,在不修改代码的同时做到了可以选择不同后端索引存储的目的。

本文作者:我还是猴子

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-03-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

datapump简介(一) (r6笔记第2天)

datapump是在10g之后推出的新特性,无论从功能还是性能上,都有一定的改进,可以说在功能上丰富了很多,在性能上也提升了很多。可以说exp/imp中能实现的...

2655
来自专栏FreeBuf

搭建属于你自己的维基站点:MediaWiki

MediaWiki 是一个全球著名的开源的,运行于 PHP+MySQL 环境下的 wiki 程序 。例如,全球最大的 wiki 项目 维基百科,就是使用 Med...

5496
来自专栏一个爱吃西瓜的程序员

学习SQL【1】-搭建SQL的学习环境

最近我在学习SQL,现在就开始记录我的学习过程吧,加油!如果你也想学SQL,希望我的学习记录能对你有所帮助。 PostgreSQL是对象关系型数据库管理系统...

3516
来自专栏程序员同行者

优化mysql服务器

1262
来自专栏Java后端技术

Spring+SpringMvc+Mybatis框架集成搭建教程四(项目部署及测试)

(1).点击如下图所示的下拉按钮,弹出Edit Configurations...后点击该项。

823
来自专栏数据和云

如何在多租户环境下使用数据库的闪回功能

编辑手记:对于数据库的闪回功能,可能大家都不陌生,那么如何在多租户环境下使用该功能,如果关闭了表空间的闪回功能,会给数据库带来哪些影响?我们一起来学习。 本文来...

3445
来自专栏猿天地

solr or es 结合弥补mongodb的全文检索功能

最近将公司的solr集群升级到了最新的6.5版本。 之前用了N年的是3点多的版本,那个时候solr还不支持自带的集群,集群方式都是自己实现的。 公司里用的最多的...

48614
来自专栏文渊之博

SQLServer中的死锁的介绍

简介 什么是死锁?      我认为,死锁是由于两个对象在拥有一份资源的情况下申请另一份资源,而另一份资源恰好又是这两对象正持有的,导致两对象无法完成操作,且...

2515
来自专栏Linux运维学习之路

MySQL日志管理

MySQL日志管理 错误日志 配置方法: vim /etc/my.cnf [mysqld] log-error=/tmp/mysql.log 查看配置方式: s...

47412
来自专栏技术博文

MySQL常见错误码及说明

1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败<=================可以忽略 1008:数据库不存在,删除...

4608

扫码关注云+社区

领取腾讯云代金券