前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原创投稿 | 如何为Django添加中文搜索服务

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

作者头像
小小科
发布2018-05-03 10:38:22
9390
发布2018-05-03 10:38:22
举报
文章被收录于专栏:北京马哥教育北京马哥教育

云豆贴心提醒,本文阅读时间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通过下层抽象,在不修改代码的同时做到了可以选择不同后端索引存储的目的。

本文作者:我还是猴子

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档