涉及到的工具
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
领取专属 10元无门槛券
私享最新 技术干货