Lucene學(xué)習筆記(1)
Lucene是一套全文檢索的API,對其介紹的文章和應用的案例都多,可參考lucene及本文的參考文獻。
此次學(xué)習,以實(shí)用為主,一是簡(jiǎn)單應用,二是Web應用,三是漢化,四相關(guān)應用(Lucene主頁(yè)上在SandBox中)。
0、準備工作
去Lucene的主頁(yè)下載目前的穩定版本lucene-1.2.tar.gz,解壓縮,將lucene-1.2目錄下的兩個(gè)jar文件lucene-1.2.jar和lucene-demo2-1.2.jar放到適當的目錄下后,并將其加入到CLASSPATH環(huán)境變量中。
tar zxvf lucene-1.2.tar.gz <----解壓縮
cd lucene-1.2
cp *.jar $DP<---存放jar文件的目錄,根據具體工作要求用實(shí)際目錄替換
CLASSPATH=$CLASSPATH:$DP/lucene-1.2.jar:$DP/lucene-demos-1.2.jar; export CLASSPATH
如果不想在每次都登錄后,可以編輯/etc/profile或自己目錄下的.profile,將上面的最后一行加到文件的最后一行。Windows的設置,右擊桌面的“我的電腦”,選“高級”->“環(huán)境變量”->選中CLASSPATH->“編輯”,在輸入框中加入兩個(gè)jar文件的全路徑名,注意分隔符是分號(;)。參見(jiàn)右圖。
1、運行demo
$ java org.apache.lucene.demo.IndexFiles /usr/local/man/man1/ <--對man文件建立索引
adding /usr/local/man/man1/mysql.1
...........
adding /usr/local/man/man1/cvs.1
1614 total milliseconds
$ java org.apache.lucene.demo.SearchFiles <--進(jìn)行檢索
Query: password
Searching for: password
7 total matching documents
0. /usr/local/man/man1/mysql.1
......
6. /usr/local/man/man1/mysqlshow.1
Query:
OK!Lucene自待的demo運行成功
這個(gè)demo程序調用的主要API函數:
/*關(guān)于索引的主要函數*/
File file=new File(argv[]);
IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);
Document doc = new Document();
doc.add(Field.Text("path", file.getPath()));
doc.add(Field.Keyword("modified",DateField.timeToString(file.lastModified())));
FileInputStream is = new FileInputStream(f);
Reader reader = new BufferedReader(new InputStreamReader(is));
doc.add(Field.Text("contents", reader));
writer.addDocument(doc);
writer.optimize();
writer.close();
/*關(guān)于檢索的主要函數*/
Searcher searcher = new IndexSearcher("index");
Analyzer analyzer = new StandardAnalyzer();
Query query = QueryParser.parse(lineforsearch, "contents", analyzer);
Hits hits = searcher.search(query);
for (int i = start; i < hits.length(); i++) {
Document doc = hits.doc(i);
String path = doc.get("path");
System.out.println(i + ". " + path);
}
3、運行LuceneWeb
假定tomcat裝在$TOMCATHOME目錄下,具體應用時(shí)用真實(shí)的目錄替換$TOMCATHOME。
cd $TOMCATHOME/webapps
mkdir lucenedb
cd lucenedb
java org.apache.lucene.demo.IndexHTML -create -index $TOMCAT/webapps/lucenedb ../examples<--用相對路徑“..”,一來(lái)指明被索引的文件的位置,二來(lái)用來(lái)顯示被索引文件的URL,因為檢索的jsp程序在luceneweb子目錄下.examples可用其它的真實(shí)應用的目錄名來(lái)替換
cd ..
cp ~/lucene-1.2/luceneweb.war . <--luceneweb.war在你解壓縮生成的lucene-1.2目錄下
../bin/shudown.sh
../bin/startup.sh
然后通過(guò)客戶(hù)端訪(fǎng)問(wèn)http://yourdomain.com:8080/luceneweb,如果順利瀏覽器應出現右邊所示的內容。
.再到服務(wù)器端
cd luceneweb
vi configuration.jsp <--將indexLocation 的值改為 "$TOMCATHOME/webapps/lucenedb";
cd ..
jar -ur luceneweb.war luceneweb
再到客戶(hù)端,刷新剛才的頁(yè)面,然后就可以輸入單詞進(jìn)行檢索了。遺憾的是,此是只能檢索英文單詞。且如果命中的html頁(yè)面的title是漢字的話(huà),顯示也有問(wèn)題。如圖。
此處的IndexHTML,可以對htm、html和txt類(lèi)型的文件進(jìn)行索引,用的是一個(gè)HTMLParser,除此以外與上一例基本相同。