lucene python_Python下的Lucene,PyLucene
下一個項(xiàng)目準(zhǔn)備用Python+Django來完成,先做些技術(shù)準(zhǔn)備。數(shù)據(jù)庫方面用Django已經(jīng)試驗(yàn)的差不多了,但是似乎性能很差。自己編譯了Mysql,用虛擬機(jī)測試,生成1000個用戶,1000篇文章用時80秒,這種并發(fā)性能恐怕沒有辦法讓人滿意。(每篇文章需要單獨(dú)生成Tag和文章與Tag的對應(yīng)關(guān)系,涉及8次數(shù)據(jù)庫操作。)花了一天時間試驗(yàn)InnoDB和MyIsam的區(qū)別,但是似乎沒有影響,開不開Transaction都一樣。先不管它了,也許和我的機(jī)器硬件有關(guān)系,硬件的sync關(guān)不掉。看官方的說法,SlashDot用Django可以實(shí)現(xiàn)每秒800條數(shù)據(jù)的插入速度。
網(wǎng)站肯定要用到全文檢索,目前唯一的全文檢索解決方案就是Lucene了,.Net上也有Lucene.Net可以選。搜索了一下,發(fā)現(xiàn)了PyLucene,這個Python上的Lucene實(shí)現(xiàn)。似乎是使用Python對Lucene進(jìn)行了一次重新包裝。
下載了它的Windows版本,安裝比較簡單,直接把幾個庫文件復(fù)制到對應(yīng)的Lib目錄就行了。運(yùn)行了一下Sample目錄下的測試文件,先是用IndexFiles和SearchFiles試了一下,SearchFiles是接收參數(shù)來搜索的,但是我沒有辦法輸入中文,會出現(xiàn)錯誤提示。后來把要搜索的詞直接放到文件里面去,不報錯了,但是搜索不出來。本以為PyLucene不支持中文,正在納悶豆瓣的搜索是怎么做的,突然發(fā)現(xiàn)了一個好東西。
看了一下sample目錄下的LuceneInAction目錄,里面居然有個ChineseTest文件。它調(diào)用的是另一個目錄下的測試文件,測試一個漢字的搜索,運(yùn)行了一下,居然是成功的。再看了一下IndexFiles,里面讀文件用的編碼是英文編碼,改成GB2312,OK,可以搜索到了。但是只能搜索單字,不能按詞搜索。只要輸入兩個字就出錯。再比較一下Test文件,Query的生成方法不一樣,TermQuery似乎是單元搜索,不支持詞搜索,換成了QueryParser,成功了。但是還有一個小問題,比如搜索“中華”,在文章里,在中和華中間隨便加多少空格和回車都沒有關(guān)系,照樣可以搜索到。但是加入其它字或者英文字母以后就搜索不到了。這個影響不大,畢竟人們常用的搜索都是自然詞。
有了PyLucene這個好東西,心頭一塊大石頭算是落地了。沒想到,等到要在開發(fā)服務(wù)器的Linux上安裝這個東西的時候,可費(fèi)了功夫了。
官方的下載包做的很奇怪,ubuntu, debian, gentoo都有對應(yīng)的二進(jìn)制包可用,但是Redhat就沒有,只能用源碼包編譯,而它的編譯方式又做的極其簡陋,沒有configure文件,只有Makefile。按照說明,需要自己編輯Makefile,去掉你需要的注釋行,修改參數(shù),然后直接Make。但是里面有一個對DB的引用,檢查了一下,BerkeleyDB似乎在CentOS4里面沒有,只好自己去官方網(wǎng)站下載了4.4.20的源碼,先編譯安裝它。雖然最新版是4.5.20,但是怕不兼容,所以還是用它配置文件里推薦的這個。編譯這個東西也挺奇怪,不過還好,畢竟有官方文檔一步步的說明,解壓后需要進(jìn)入build_unix目錄,然后調(diào)用../dist/configure來配置,然后make && make install。指定prefix失敗。裝完了這個東西,再改PyLucene的配置文件,根據(jù)生成的錯誤消息猜了好幾次才終于可以編譯了。最終需要改的地方為:
1、取消Linux那一段的注釋。
2、PREFIX_PYTHON是你的Python的目錄。因?yàn)槲业腜ython是自己編譯安裝的,所以這里需要改一下。
3、DB=這個我指向了BerkeleyDB的源碼目錄才通過編譯的(還好沒刪)。
其它的不用改。編譯到一半報錯,有一個libgcj.a文件找不到,到/usr/lib下找了一下沒有這個文件,但是有個差不多的.so,于是做了個ln -s,居然就通過編譯了。然后make install的時候又有問題,提示libgcc_s.so.1找不到,這個是Makefile里面的LIB_INSTALL參數(shù)指定的,我不知道它的意義在哪里,最后我也沒找到這個文件,但是直接進(jìn)入Sample目錄運(yùn)行了一下測試文件,居然就成功了。真TMD。這就是Linux嗎?
終于可以安心的研究Django了。似乎Ruby On Rails還沒有支持中文全文檢索的模塊吧?
總結(jié)
以上是生活随笔為你收集整理的lucene python_Python下的Lucene,PyLucene的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql雨凇_Unity3D研究院之U
- 下一篇: 一方沙等于多少方陶粒啊?