lucene是一个开源的全文检索引擎工具包。在学习lucene之前需要对全文检索的原理有一定的了解,http://ye-liang.iteye.com/admin/blogs/new,这篇文章对了解原理很有帮助。
我这里只附上自学过程中写的一个例子。
lucene下载地址:http://lucene.apache.org/
lucene的核心功能两大块:创建索引和搜索
创建索引的代码
// 通过Analyzer的创建指定索引语言词汇的分析器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
// 通过Directory的创建指定索引存放位置
Directory dir = FSDirectory.open(new File("c://indexFile"));
// 通过IndexWriterConfig的创建指定索引版本和语言词汇分析器
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_47,
analyzer);
// 创建IndexWriter,用来写索引文件
IndexWriter indexWriter = new IndexWriter(dir, iwc);
for (File f : new File("c://dataFile").listFiles()) {
Reader txtReader = new FileReader(f);
// 通过创建Document指定要索引的文档
Document doc = new Document();
// 向Document文档中添加Field信息,不同类型的信息用不同类型的Field来表示
doc.add(new TextField("path", f.getCanonicalPath(), Store.YES));
doc.add(new TextField("content", txtReader));
// 将Document添加到IndexWriter中并且提交
indexWriter.addDocument(doc);
}
indexWriter.commit();
indexWriter.close();
主要通过IndexWriter对象将c://dataFile下的所有文件建立索引,索引文件的目录位置c://indexFile。Document对象对应一个带搜索的文件,可以是文本文件也可以是一个网页。可以为Document对象指定field,比如这里我们为文本文件定义了两个field:path和content。
在c://dataFile目录下面新建几个txt文件,随便输入几个内容,作为待搜索的文件。
运行完上面的代码后,在c://indexFile目录下面生成了索引文件。
搜索的代码
// 通过Analyzer的创建指定索引语言词汇的分析器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
// 通过Directory的创建指定索引存放位置
Directory dir = FSDirectory.open(new File("c://indexFile"));
// 创建IndexReader将搜索目录读取到内存
IndexReader indexReader = DirectoryReader.open(dir);
// 创建IndexSearcher准备搜索
IndexSearcher indexSearcher=new IndexSearcher(indexReader);
// 创建QueryParser对查询语句进行语法分析
QueryParser parser = new QueryParser(Version.LUCENE_47, "content", analyzer);
// 根据搜索关键字创建Query生成查询语法树
Query query = parser.parse("aa");
//获取搜索结果
TopDocs td=indexSearcher.search(query, 1000);
ScoreDoc[] sds =td.scoreDocs;
for(ScoreDoc sd : sds){
Document d = indexSearcher.doc(sd.doc);
System.out.println(d.get("path"));
}
主要通过IndexReader对象读取索引文件。通过QueryParser对象指定语法分析器和对document的哪个字段进行查询。Query对象指定搜索的关键字。通过IndexSearcher对象的search方法返回搜索结果集TopDocs。
运行完上面代码后,会输出包含关键字aa的txt文件的路径。比如C:\dataFile\1.txt