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/ 交流 優化

相關文章
相關標籤/搜索