lucene学习的第一个例子之创建索引

作者: qdhy199148
发布时间:2015-07-08 16:57:23

以前用过lucene 3.5,近来又要用到lucene,索性学一下最新的版本,lucene从4.0之后还是做了很大的调整,比如增加了中文分词器等,jar包也比较分散,并没有全部打包在core包中。

1.添加jar包:

除了core jar包以外,还要加上分词器通用common jar包,另外一个是中文分词器的smartcn jar包。

2.按照常规的步骤编写第一个建立索引的代码:

import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;  import org.Apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.util.Version;  public class IndexUnit {  	/** 	 * 建立索引 	 *  	 * @throws Exception 	 */ 	public void createIndex() {  		IndexWriter writer = null;  		try {  			// 创建Directory 			// 创建索引到内存当中 			// Directory directory = new RAMDirectory(); 			// 创建索引到硬盘当中 			Directory directory = FSDirectory.open(new File("./file/index"));  			// 创建IndexWriter 			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46, 					new SmartChineseAnalyzer(Version.LUCENE_46)); 			writer = new IndexWriter(directory, iwc);  			// 创建Documnet 			Document doc = null;  			// 为Documnet添加Feild 			File f = new File("./file/example"); 			for (File file : f.listFiles()) { 				doc = new Document(); 				doc.add(new TextField("content", new FileReader(file))); 				doc.add(new StringField("filename", file.getName(), 						Field.Store.YES)); 				doc.add(new StringField("filelocation", file.getAbsolutePath(), 						Field.Store.YES)); 			}  			// 通过IndexWriter添加文档到索引中 			writer.addDocument(doc);  		} catch (CorruptIndexException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} catch (LockObtainFailedException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} catch (FileNotFoundException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} catch (IOException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} finally { 			try { 				// 注意关闭索引写入流,否则会产生写锁 				if (writer != null) { 					writer.close(); 				} 			} catch (CorruptIndexException e) { 				// TODO Auto-generated catch block 				e.printStackTrace(); 			} catch (IOException e) { 				// TODO Auto-generated catch block 				e.printStackTrace(); 			} 		} 	}  }

还是按照:创建Directory,创建IndexWriter,创建Documnet,为Documnet添加Feild,通过IndexWriter添加文档到索引中。这样的步骤创建索引。

从lucene 4.0之后field的添加有些变动,不再需要设置是否进行分词的参数,使用TextField默认分词,使用StringField默认不分词。

另外使用的分词器是SmartChineseAnalyzer分词器,这是lucene自带的一个中文分词器,但是中文分词效果一般。



版权声明:本文为博主原创文章,未经博主允许不得转载。

标签: Lucene
来源:http://blog.csdn.net/qdhy199148/article/details/18958655

推荐: