在之前的博文中,我对haystack进行了诸多方面的吐槽,因此就产生了摆脱haystack的想法,而是利用whoosh搜索库自己实现搜索功能。为了提升搜索功能的通用性,我将其也设计成一个即插即用的app,算是自己实现了一个简单的搜索框架——blogsearchengine。
由于这个搜索框架目前的服务对象是基于我们的个人博客,因此将其命名为blogsearchengine。然而,作为一个具备通用性的搜索框架,显然它不仅能搜索我们的博客,还可以根据用户的设定来搜索其他django的模型数据,并且根据用户指定条件来对搜索范围进行更新和过滤。此外,blogsearchengine还提供了两种默认的搜索表单,可让用户根据自己的喜好来设定搜索条件。另外,虽然我之前吐槽过haystack的View类的设计,然而blogsearchengine也提供了默认的View类用于显示搜索结果。
blogsearchengine目前包括三大部分:1、搜索引擎searchengine;2、两种搜索表单;3、一个搜索结果View类。searchengine类显然是这个框架的核心部分,它包含了建立索引、更新索引以及提供搜索结果几个核心的功能;搜索表单包括一个基础表单和一个带单选框的表单,前者可以让用户使用简单搜索功能,而后者可以让用户在选定的范围内进行搜索;而View类免去了用户再去设计后端视图的工作,只需传入自己的模板文件名即可得到现成的搜索结果。
这是采用了blogsearchengine框架后的搜索页面和搜索结果:
搜索表单使用的是带单选框的表单,可以根据用户选择在指定范围中搜索。
这里是搜索结果,关键字已被加粗高亮。
在这期博客中,首先为大家介绍blogsearchengine的核心部分——搜索引擎searchengine。
一 whoosh搜索库
在介绍搜索引擎之前,有必要介绍一下whoosh的概念。whoosh是python实现的一套索引库。它提供了相当多的函数和类用于让用户对自己的文档建立索引,并通过给定的条件来对这些建立了索引的文档进行搜索。与solr和elasticsearch相比,whoosh本身就是基于python开发的,而solr和elasticsearch则是用java实现,使用whoosh可以免去一些环境配置工作。
whoosh具备以下特点:1、速度快,使用纯python解析,不需要编译器;2、whoosh使用BM25F作为排序算法,更方便自定义;3、whoosh建立的索引相比其他索引库