Python下的Lucene,PyLucene

來源:互聯網
上載者:User

下一個項目準備用Python+Django來完成,先做些技術準備。資料庫方面用Django已經實驗的差不多了,但是似乎效能很差。自己編譯了Mysql,用虛擬機器測試,產生1000個使用者,1000篇文章用時80秒,這種並發效能恐怕沒有辦法讓人滿意。(每篇文章需要單獨產生Tag和文章與Tag的對應關係,涉及8次資料庫操作。)花了一天時間實驗InnoDB和MyIsam的區別,但是似乎沒有影響,開不開Transaction都一樣。先不管它了,也許和我的機器硬體有關係,硬體的sync關不掉。看官方的說法,SlashDot用Django可以實現每秒800條資料的插入速度。

網站肯定要用到全文檢索索引,目前唯一的全文檢索索引解決方案就是Lucene了,.Net上也有Lucene.Net可以選。搜尋了一下,發現了PyLucene,這個Python上的Lucene實現。似乎是使用Python對Lucene進行了一次重新封裝。

下載了它的Windows版本,安裝比較簡單,直接把幾個庫檔案複製到對應的Lib目錄就行了。運行了一下Sample目錄下的測試檔案,先是用IndexFiles和SearchFiles試了一下,SearchFiles是接收參數來搜尋的,但是我沒有辦法輸入中文,會出現錯誤提示。後來把要搜尋的詞直接放到檔案裡面去,不報錯了,但是搜尋不出來。本以為PyLucene不支援中文,正在納悶豆瓣的搜尋是怎麼做的,突然發現了一個好東西。

看了一下sample目錄下的LuceneInAction目錄,裡面居然有個ChineseTest檔案。它調用的是另一個目錄下的測試檔案,測試一個漢字的搜尋,運行了一下,居然是成功的。再看了一下IndexFiles,裡面讀檔案用的編碼是英文編碼,改成GB2312,OK,可以搜尋到了。但是只能搜尋單字,不能按詞搜尋。只要輸入兩個字就出錯。再比較一下Test檔案,Query的產生方法不一樣,TermQuery似乎是單元搜尋,不支援詞搜尋,換成了QueryParser,成功了。但是還有一個小問題,比如搜尋“中華”,在文章裡,在中和華中間隨便加多少空格和斷行符號都沒有關係,照樣可以搜尋到。但是加入其它字或者英文字母以後就搜尋不到了。這個影響不大,畢竟人們常用的搜尋都是自然詞。

有了PyLucene這個好東西,心頭一塊大石頭算是落地了。沒想到,等到要在程式開發伺服器的Linux上安裝這個東西的時候,可費了功夫了。

官方的下載包做的很奇怪,ubuntu, debian, gentoo都有對應的二進位包可用,但是Redhat就沒有,只能用源碼包編譯,而它的編譯方式又做的極其簡陋,沒有configure檔案,只有Makefile。按照說明,需要自己編輯Makefile,去掉你需要的注釋行,修改參數,然後直接Make。但是裡面有一個對DB的引用,檢查了一下,BerkeleyDB似乎在CentOS4裡面沒有,只好自己去官方網站下載了4.4.20的源碼,先編譯安裝它。雖然最新版是4.5.20,但是怕不相容,所以還是用它設定檔裡推薦的這個。編譯這個東西也挺奇怪,不過還好,畢竟有官方文檔一步步的說明,解壓後需要進入build_unix目錄,然後調用../dist/configure來配置,然後make && make install。指定prefix失敗。裝完了這個東西,再改PyLucene的設定檔,根據產生的錯誤訊息猜了好幾次才終於可以編譯了。最終需要改的地方為:

1、取消Linux那一段的注釋。

2、PREFIX_PYTHON是你的Python的目錄。因為我的Python是自己編譯安裝的,所以這裡需要改一下。

3、DB=這個我指向了BerkeleyDB的源碼目錄才通過編譯的(還好沒刪)。

其它的不用改。編譯到一半報錯,有一個libgcj.a檔案找不到,到/usr/lib下找了一下沒有這個檔案,但是有個差不多的.so,於是做了個ln -s,居然就通過編譯了。然後make install的時候又有問題,提示libgcc_s.so.1找不到,這個是Makefile裡面的LIB_INSTALL參數指定的,我不知道它的意義在哪裡,最後我也沒找到這個檔案,但是直接進入Sample目錄運行了一下測試檔案,居然就成功了。真TMD。這就是Linux嗎?

終於可以安心的研究Django了。似乎Ruby On Rails還沒有支援中文全文檢索索引的模組吧?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.