sonfon2007-02-06 18:09最近需要用尝试Lucene建立一个对小数据集建立索引和查询,从网上看到了这个例子,拿来共享一下:首先去 apache 网站下载 lucene 的开发包,并配置好环境变量http://jakarta.apache.org/lucene/docs/index.html建立索引程序:/** Created on 2004-4-26*/import org.apache.lucene.index.*;import org.apache.lucene.analysis.standard.*;import org.apache.lucene.document.*;import java.io.*;/*** @author bell.wang*/public class IndexFiles {public static void main(String[] args) {try{ IndexWriter writer = new IndexWriter("myindex", new StandardAnalyzer(), true); File files = new File("mydoc"); String[] Fnamelist = files.list(); for (int i = 0; i < Fnamelist.length; i++){ File file = new File(files,Fnamelist); Document doc = new Document(); Field fld = Field.Text("path", file.getPath()); doc.add(fld); fld = Field.Keyword("modified", DateField.timeToString(file.lastModified())); doc.add(fld); FileInputStream in = new FileInputStream(file); Reader reader = new BufferedReader(new InputStreamReader(in)); fld = Field.Text("contents", reader); doc.add(fld); writer.addDocument(doc); System.out.println("Added : " + doc.get("path")); } writer.optimize(); writer.close(); System.out.println("Has Added Total: " + Fnamelist.length);}catch(Exception e){ System.out.println(e);}}}程序对当前路径下mydoc目录下所有文件建立索引,其中索引有三个字段: 文件路径,最后修改时间,文件内容. 建立的索引文件在当前路径下的myindex目录检索程序:/** Created on 2004-4-26**/import org.apache.lucene.analysis.*;import org.apache.lucene.analysis.standard.*;import org.apache.lucene.search.*; import org.apache.lucene.queryParser.*;import org.apache.lucene.document.*;//import com.augmentum.hrms.*;import java.util.Date;/*** @author bell.wang**/public class SearchFile {public static void main(String[] args) {//XMap a = new XMap("");Analyzer anlzr = new StandardAnalyzer();try{ Query q = QueryParser.parse("数据库", "contents", anlzr); System.out.println("Searching for : " + q.toString("contents")); Searcher serch = new IndexSearcher("myindex"); Hits hts = serch.search(q); for(int i=0; i<hts.length(); i++){ Document doc = hts.doc(i); String path = doc.get("path"); System.out.println("Find: " +i+": "+ path); System.out.println("Find: " + doc.get("modified")); System.out.println("Find: " + doc.get("path")); } System.out.println("Find Total: " + hts.length());}catch(Exception e){ System.out.println(e);}}}程序对索引的contents字段用“数据库“关键字进行查询,返回的是所有包含有关键字的文档集合,分别打印出各个字段.上面的程序我用纯文本文件测试通过,.txt,.jsp,.html 都可以,word,pdf 等文件需要经过转化才能对其进行索引。