我们已经实现的搜索功能实在过于简单,没有多大的实用性。对于一个搜索引擎来说,至少应该能够根据用户的搜索关键词对搜索结果进行排序以及高亮关键字。
Django Haystack 简介
django-haystack 是一个专门提供搜索功能的 django 第三方应用,它支持 Solr、Elasticsearch、Whoosh、Xapian 等多种搜索引擎配合著名的中文自然语言处理库 jieba 分词,就可以为我们的博客提供一个效果不错的博客文章搜索系统。
安装必要依赖
激活虚拟环境执行:
pip install whoosh django-haystack jieba -i https://pypi.douban.com/simple/
配置 Haystack
首先是把 django haystack 加入到 INSTALLED_APPS 选项里.
然后加入如下配置项:
HAYSTACK_CONNECTIONS = {
'default':{
'ENGINE':'blog.whoosh_cn_backend.WhooshEngine',
'PATH':os.path.join(BASE_DIR,'whoosh_index'),
}
}
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
参数说明:
HAYSTACK_CONNECTIONS 的 ENGINE 指定了 django haystack 使用的搜索引擎。
PATH 指定了索引文件(搜索引擎需要建立索引文件)需要存放的位置。
HAYSTACK_SEARCH_RESULTS_PER_PAGE 指定如何对搜索结果分页,这里设置为每 10 项结果为一页。
HAYSTACK_SIGNAL_PROCESSOR 指定什么时候更新索引,这里我们使用 haystack.signals.RealtimeSignalProcessor,作用是每当有文章更新时就更新索引。由于博客文章更新不会太频繁,因此实时更新没有问题。
处理数据
接下来就要告诉 django haystack 使用哪些数据建立索引以及如何存放索引。
如果要对 blog 应用下的数据进行全文检索,做法是在 blog 应用下建立一个search_indexes.py 文件,写上如下代码: