Django全文检索实现:基于HayStack+Whoosh引擎+Jieba中文分词

涉及到的工具

haystack是django的开源搜索框架,该框架支持Solr,Elasticsearch,Whoosh, **Xapian搜索引擎,不用更改代码,直接切换引擎,减少代码量。

搜索引擎使用Whoosh,这是一个由纯Python实现的全文搜索引擎,没有二进制文件等,比较小巧,配置比较简单,当然性能自然略低。

中文分词Jieba,由于Whoosh自带的是英文分词,对中文的分词支持不是太好,故用jieba替换whoosh的分词组件。

Model配置

安装Python模块

whoosh

django-haystack

jieba

修改 whoosh 的分析器

将文件(该文件路径为)拷贝到app文件夹下面,修改如下

添加

修改为如下

修改settings.py

添加 Haystack 到Django的 INSTALLED_APPS

注:

是我的App名称,请根据情况替换成你自己的App文件夹名称

为存放Whoosh索引文件的文件夹。

其他引擎的配置请查阅官方文档。

建立索引

在需要搜索功能的App文件夹下建立文件,用于创建索引。

内容如下:

每个索引里面必须有且只能有一个字段为document=True,这代表haystack 和搜索引擎将使用此字段的内容作为索引进行检索(primary field)。其他的字段只是附属的属性,方便调用,并不作为检索数据。

注意:如果使用一个字段设置了document=True,则一般约定此字段名为text,这是在SearchIndex类里面一贯的命名,以防止后台混乱,当然名字你也可以随便改,不过不建议改。

并且,haystack提供了use_template=True在text字段,这样就允许我们使用数据模板去建立搜索引擎索引的文件,使用方便(官方推荐,当然还有其他复杂的建立索引文件的方式,目前我还不知道),数据模板的路径为,例如本例子为

文件名必须为要索引的,其内容为:

这个数据模板的作用是对

Post.post_title

Post.post_author

Post.post_content

Post.post_summary

这四个字段建立索引,当检索的时候会对这三个字段做全文检索匹配。

配置URL

在链接配置中加入

编写search.html

在 文件夹下添加 文件:

建立索引

使用或者使用命令。

在 settings.py 里加入以下配置,实现自动刷新索引。

这样就OK啦,可以打开 试试看搜索功能了~

SearchQuerySet 初窥

我发现网络上的资料都没有介绍到,于是在官网翻看了一下。

文档地址:https://django-haystack.readthedocs.io/en/v2.8.1/searchqueryset_api.html#ref-searchqueryset-api

这个 类似于DjangoORM框架里的 ,熟悉Django的同学应该很快能上手,不过做结果处理的话会比较麻烦。

用到SearchQuerySet一般都是用于Ajax API,我发现之前用于 QuerySet 的序列化器不能用于 SearchQuerySet,要做的话还需要做一些修改。

这个等有时间再继续改。或者我再看看官网文档,研究一下。

用法挺简单的,看一下官方文档就行,已经写得很清楚了~

About

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181014G1NOAM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券