django+haystack+whoosh+分词库=搜索站

前言

不多有朋友写相关haystack与whoosh的文章,更没有一个较好的示例。因此我把这个完整的示例开源了,但愿有兴趣的同窗可以交流。示例网站 python

解决的问题:

  1. 不一样字段的优先级,好比Title比Content高。(haystack的whoosh backend默认不支持此功能)
  2. 相关性搜索(more_like_this)功能
  3. 能结合mysql数据库使用
  4. 解决中文分词功能(能够用我本身的yaha分词,或者结巴分词)
  5. 实现了更好的ChineseAnalyzer,这个的测试地址
  6. 使用whoosh 2.5.1。默认haystack使用whoosh2.4,用2.5会报错
  7. 修正了haystack+whoosh2.5.1的搜索词纠正功能,默认用老的Spelling API,在whoosh2.5.1下不支持。

同时注意: mysql

若是使用结巴分词默认的ChineseAnanlyzer,请修改代码以下会更好: git

def ChineseAnalyzer(stoplist=STOP_WORDS,minsize=1,stemfn=stem,cachesize=50000):
    return ChineseTokenizer()|LowercaseFilter()|StopFilter(stoplist=stoplist,minsize=minsize)\
                                        |StemFilter(stemfn=stemfn, ignore=None,cachesize=cachesize)
使用 yaha分词请小小的修正如下代码:
#analyzer.py
_cuttor = Cuttor()
_cuttor.set_stage1_regex(re.compile('(\d+)|([a-zA-Z]+)', re.I|re.U))
#注释这里,把名字发现去掉。
#_cuttor.add_stage(SurnameCutting())
#_cuttor.add_stage(SuffixCutting())

class ChineseTokenizer(Tokenizer):

就是把名字发现功能与地名给去掉了,省得搜索刘德的时候没法获得刘德华的结果。固然后续优化speling功能以后,可能有更好的解决办法。 github

建议别开启spelling功能,由于这样搜索速度会降低10+倍。原来多是whoosh自己的spelling模块实现得很差。这个功能后续会想办法补上。 sql

有一些功能haystack很差实现,便直接修改whoosh_cn_backend.py,从实现角度来讲不大好,但他原本只是学习示例嘛,将就。 数据库

目前没开放爬虫代码,不少数据都从豆瓣爬过来。若是你们想要数据库数据,能够在下面留言。 app

开源地址 如下是代码的readme: 学习

haysearch

A movie search using haystack and whoosh. 一个使用haystack 与whoosh的电影搜索站。使用whoosh的人不多,我用着用着就愈来愈喜欢。 网上虽然有不少对whoosh的测试,若是要看运行效果或看如何去使用whoosh,能够参考这个网站的源代码:http://www.v-find.com 这个网站仅限于本身与几个朋友使用,因此可能没多久就关了:) 测试

haystack修改

把whoosh_cn_backend.py放入到搜索项目 haystack/backend/ 文件夹下 对这个项目有兴趣可到个人博客:http://www.oschina.net/ 交流 优化

相关文章
相关标签/搜索