全文搜索的問題是老大難問題,誰都要用到,但是搜索技術可是google和baidu等吃飯的家伙,怎么可能讓大家知道。幸好有開源項目Lucene,不 過不支持中文。中文方塊字真是難,前幾天關注的聊天機器人也就是被方塊字給卡死了。不過有了WebLucene,車東的一個開源項目,基于Lucene, 算是給我們帶來了福音。
計劃安裝WebLucene,網(wǎng)上找了一下資料不多,比較實在的就2篇,不過很不錯啦,:)。按部就班的裝完,發(fā)現(xiàn)還有些問題。就再找了一下,居然自己 忽略了WebLucene的中文安裝手冊。郁悶,都怪自己的思維定勢,什么都先去網(wǎng)上找資料。其實這個中文安裝手冊已經(jīng)比較詳細了。btw:安裝手冊是非 windows平臺的,所以大家還是有必要找網(wǎng)上的windows安裝經(jīng)驗。不過我熟悉unix/linux這些,當然會后悔找資料花了很長時間。
好的,我來介紹windows的安裝過程,我的安裝實踐。
1. 安裝環(huán)境準備
==============
1.1 安裝Java JDK
—————-
安裝Java JDK 1.4或更新版本(SUN http://java.sun.com/products/j2se/).
關于如何在相應的操作系統(tǒng)上安裝JDK,請參考相應文檔。
設置環(huán)境變量:
JAVA_HOME=C:\j2sdk1.4.2_07
PATH=%JAVA_HOME%\bin;%PATH%
CLASSPATH=%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
1.2 安裝 JavaCC 2.1
———————
從 JavaCC 項目的主頁 https://javacc.dev.java.net/ 下載 JavaCC 2.1 版本
關于如何安裝 JavaCC 2.1 請參考
see https://javacc.dev.java.net/doc/installhelp.html
如何找到舊版本的JavaCC
https://javacc.dev.java.net/files/documents/17/711/JavaCC2_1.class
命令行模式的安裝:
java -cp ./ JavaCC2_1 -c
(如果不加-c就是圖形模式安裝)
我推薦下在zip版本;下載javacc2.1? 點擊下載此文件, 解壓縮javacc2.1版本,在dos下進入目錄(也就是JavaCC2_1.class的目錄),執(zhí)行java -cp ./ JavaCC2_1 -c,會出現(xiàn)一些提示信息,回車直至出現(xiàn)讓你輸入安裝目錄的提示Enter installation directory,輸入你要安裝的目錄,我的是:C:\Develop\javacc2.1。安裝成功后,桌面會出現(xiàn)一個javacc的圖標(不知道是 不是一個馬頭,呵呵)。
(特別注意:感覺weblucene只支持javacc2.1,反正最新javacc3.2版本不能夠用)
1.3 安裝 Ant
————
從 http://ant.apache.org 下載Ant關于如何安裝Ant的細節(jié)請參考 http://ant.apache.org/manual/index.html
設置環(huán)境變量
ANT_HOME=C:\java\ant-1.6.5
PATH=%ANT_HOME%\bin;%PATH%
在dos窗口輸入ant,如果出現(xiàn):
Buildfile: build.xml does not exist!
Build failed
則證明安裝成功。
1.4 安裝Java應用服務器
———————
WebLucene 需要 Servlet 2.3 / JSP 1.2 兼容的Java應用服務器。 此版本在Tomcat 4.1.x和Resin 2.1.x上測試通過。
http://jakarta.apache.org/tomcat/index.html 安裝 Tomcat
設置環(huán)境變量:
CATALINA_HOME=C:\Develop\Tomcat4.1
Tomcat在standalone模式下,使用8080端口。
也可以將應用服務器和Web服務器綁定在一起使用,請參考相應的安裝和環(huán)境變量設置。
進 入tomcat的安裝目錄C:\Develop\Tomcat4.1\bin,雙擊打開startup.bat就可以啟動tomcat。啟動時會跳出一個 dos窗口,出現(xiàn)一大堆提示信息,最后會有一句Server startup in **** ms,這樣就表示安裝成功,服務啟動了。
1.5 將WebLucene部署到成webapps
—————————–
只需將tar.gz包解壓到Tomcat的webapps目錄(官方解釋)
我的做法是將weblucene.gz解壓,得到weblucene文件,沒有后綴。對文件改名成weblucene.rar。再解壓。對解壓的文件復制到Tomcat的webapps目錄
C:\Develop\Tomcat4.1\webapps\weblucene下面有一個文件build.properties.default,將其重命名為build.properties。
修改build.properties的內(nèi)容為:
jsdk_jar=C:\\Develop\\Tomcat4.1\\\common\\lib\\servlet.jar
javacc.home = C:\\Develop\\javacc2.1\\bin
javacc.zip.dir = C:\\Develop\\javacc2.1\\bin\\lib
javacc.zip = C:\\Develop\\javacc2.1\\bin\\lib\\JavaCC.zip
需要檢查自己的目錄中,是否有servlet.jar和JavaCC.zip這兩個文件,因為版本不一樣,有的命名也不一樣。路徑是\\,而不是/,大家不要搞錯了。同樣建議不要使用環(huán)境變量%,因為好像這里不起作用,:(
2.2 Build
———
在weblucene根目錄下運行 “ant build” 命令:
C:\Develop\Tomcat4.1\webapps\weblucene>ant build
注意:如果build失敗,請檢查%CLASSPATH% 環(huán)境變量,并確保重要的jar包都在相應路徑下。
提示失敗而前面的步驟(安裝工具以及環(huán)境變量的設置)又都正確,那就檢查build.properties文件是否正確,以及build.xml是否正確。根據(jù)提示信息,檢查出了什么錯誤,直至成功。成功后會出現(xiàn):
BUILD SUCCESSFUL
Total time: 5 seconds
成功Build, 下一步就是準備索引了。
直接解壓下載的文件即可。如果你要最新版本,按以下方法。
程序代碼
從Sourceforge.net獲得Weblucene的最新版本:
匿名導出:
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/weblucene login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/weblucene co weblucene
sourceforge.net 的cvs 操作起來要稍微麻煩一些,必須先通過ssh username@cvs.sourceforge.net,
ssh username@cvs.sourceforge.net
把 CVS_RSH 設置為ssh,
export CVS_RSH=ssh
然后才能夠通過ext模式進行更新和提交,每次add、commit 操作都要輸入一次密碼:
cvs -d:ext:username@cvs.sourceforge.net:/cvsroot/weblucene export -D now weblucene
3. 準備Index
============
(在這里要特別注意:在準備索引的時候要先檢查jdk的版本,1.3版本是出錯的,要1.4以上的才可以)
weblucene中包含了一個簡單的 xml 文檔 /weblucene/doc/news_sample.xml
關于xml的結(jié)構請參考:/weblucene/doc/weblucene_index.dtd
你可以執(zhí)行命令創(chuàng)建索引。
創(chuàng)建索引使用IndexRunner 命令:位于 /weblucene/WEB-INF/classes/IndexRunner.class),
參數(shù)格式:
-i xml_url 輸入XML的URL
-o output_dir 輸出索引的目錄
注意:
XML數(shù)據(jù)源將被索引到 $output_dir的 index 子目錄下,如果對一個舊的索引進行更新,
舊索引將被備份到$output_dir 的 work 子目錄下,
例子:
在dump下面有個blog.xml,這是一些文章素材,你可以對其建立索引測試,也可以使用自己的語料建立索引。
進入C:\Develop\tomcat4.1\webapps\weblucene\WEB-INF\classes,在這個目錄下面有一個IndexRunner的文件。在該目錄下面建立一個run.bat的文件,內(nèi)容如下:
程序代碼
set LIB=C:\Develop\tomcat4.1\webapps\weblucene\webapp\WEB-INF\lib
set SERVLETLIB=C:\Develop\tomcat4.1\common\lib
set CLASSESLIB=C:\Develop\tomcat4.1\webapps\weblucene\webapp\WEB-INF\classes
set XMLPATH=C:\Develop\tomcat4.1\webapps\weblucene\dump
set LOGPATH=C:\Develop\tomcat4.1\webapps\weblucene\webapp\WEB-INF\var
java -cp %CLASSESLIB%;%LIB%\java-getopt.jar;%LIB%\jdom.jar;%LIB%\log4j.jar;%LIB%\lucene.jar;%LIB%\xalan.jar;%LIB%\xercesImpl.jar;%SERVLETLIB%\servlet.jar;./ IndexRunner -i %XMLPATH%\blog.xml -o %LOGPATH%\blog
每次需要執(zhí)行索引的時間,在該目錄下輸入文件名直接執(zhí)行或是圖形界面下雙擊該文件均可。
成功后會出現(xiàn):
50 rows added Total time Use:0 second
750 [main] INFO IndexRunner - Great! Indexing OK
注意:確保路徑中沒有空格,一般tomcat4.1會目錄路徑上tomcat和4.1之前有空格。切記!
3. 運行搜索測試
==============
SearchRunner (位于 /weblucene/WEB-INF/classes/SearchRunner.class) 是一個命令行的索引測試工具
格式:
%java SearchRunner -i $weblucene_home_directory/WEB-INF/var/$dir_name/index \
-f IndexName -k “query keywords”
例如:
還 是剛才的目錄,執(zhí)行命令:java -cp ../lib/java-getopt.jar;../lib/jdom.jar;../lib/log4j.jar;../lib/lucene.jar;../lib/xalan.jar;../lib/xercesImpl.jar;../lib/servlet.jar;./ SearchRunner -i ../var/blog/index -f “FullIndex” -k “SOAP”
當然也可以做成bat文件。
程序代碼
set LIB=C:\Develop\tomcat4.1\webapps\weblucene\webapp\WEB-INF\lib
set SERVLETLIB=C:\Develop\tomcat4.1\common\lib
set CLASSESLIB=C:\Develop\tomcat4.1\webapps\weblucene\webapp\WEB-INF\classes
set XMLPATH=C:\Develop\tomcat4.1\webapps\weblucene\dump
set LOGPATH=C:\Develop\tomcat4.1\webapps\weblucene\webapp\WEB-INF\var
java -cp %CLASSESLIB%;%LIB%\java-getopt.jar;%LIB%\jdom.jar;%LIB%\log4j.jar;%LIB%\lucene.jar;%LIB%\xalan.jar;%LIB%\xercesImpl.jar;%SERVLETLIB%\servlet.jar;./ SearchRunner -i %LOGPATH%\blog\index -f “FullIndex” -k “SOAP”
這樣就會出現(xiàn)搜索到的文章信息了。因為我們剛才建索引時,把索引建在了var/blog/目錄下,所以現(xiàn)在就要使用../var/blog/index,如果你剛才建立的不是這個目錄,記得修改。
SOAP的含義就是關鍵詞,也就是你要搜索含java的文章。FullIndex就是有索引的項,你對那幾個字段建立了索引,都會寫在FullIndex這個字段里面。
搜索結(jié)果將被打印到屏幕上:
程序代碼
— find 1
score=0.48 http://www.javaws.com/snipsnap/space/2003-12-08#apache.axis
.tcp.monitor>