Haystack 全文检索

简单介绍一下项目需求: 项目组需要对外发布文档,文档撰写使用的是Markdown,对外需要使用HTML。起初,使用的是Nginx+Jekyll的解决方案。随着文档的增加,文档系统对搜索功能有了强烈的需求。笔者在另外一篇文章中有所讨论,但是这几种方案,有的搜索效果不理想,有的需要依赖其他服务,显得有些重。于是,便有了本文的实施方案。

1. 工具介绍

  • Whoosh是一个纯Python实现的全文搜索组件。Whoosh不但功能完善,而且速度很快。
  • Haystack是一个第三方的Django app,提供全文检索功能。可以对Model里面的内容进行索引、搜索。同时,Django-haystack支持Whoosh、Solr、Xapian、Elasticsearc四种全文检索引擎后端,实质上是一种全文检索的框架,使用时可以自由选择搭配。
  • Jieba是一个Python中文分词组件,其包含多种功能,本文使用了其中的ChineseAnalyzer中文分词功能。

2. 设计方案

方案思路

  • 1.将Jekyll作为Markdown转HTML的工具,最终得到本地所见即所得的HTML文档
  • 2.使用Python爬虫工具BeautifulSoup,将静态的HTML解析后导入DB
  • 3.通过Jieba分词,利用Whoosh建立查询索引
  • 4.直接通过Django匹配.html的URL,从数据库中获取数据,对外提供文档服务,可以确保Nginx+Jekyll方案的链接依然有效。
  • doc/type2/bbb.html