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