日期:2014-05-16 浏览次数:20721 次
package com.gjw.lecence; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.util.Date; import jxl.Sheet; import jxl.Workbook; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.SimpleFSDirectory; import org.apache.lucene.util.Version; import org.textmining.text.extraction.WordExtractor; /** * 创建索引 Lucene 3.0(第一步) * * @author RenWeigang * * @version 2010.12.13 * */ public class Indexer { //保存索引文件的地方 private static String INDEX_DIR = "E:\\index"; //将要搜索TXT文件的地方 private static String DATA_DIR = "E:\\rr"; public static void main(String[] args) throws Exception { long start = new Date().getTime(); int numIndexed = index(new File(INDEX_DIR), new File(DATA_DIR)); long end = new Date().getTime(); System.out.println("Indexing " + numIndexed + " files took " + (end - start) + " milliseconds"); } /** * 索引dataDir下文件,并储存在indexDir下,返回索引的文件数量 * * @param indexDir * @param dataDir * @return * @throws IOException * isDirectory() 判断 */ public static int index(File indexDir, File dataDir) throws IOException { if (!dataDir.exists() || !dataDir.isDirectory()) { throw new IOException(dataDir + " does not exist or is not a directory"); } /** * 创建IndexWriter对象, * 第一个参数是Directory,也可以为:Directory dir = new SimpleFSDirectory(new File(indexDir)); * 第二个是分词器, * 这个IndexWriter是针对文件系统的 * 第三个参数是指: 如果指定为true,表示重新创建索引库,如果已存在,就删除后再创建; * 指定为false,表示追加(默认值) * 如果不存在,就抛异常. * 第四表示表示分词的最大值,比如说new MaxFieldLength(2), * 就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED * */ Directory dir = new SimpleFSDirectory(indexDir); IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), true, IndexWriter.MaxFieldLength.LIMITED); indexDirectory(writer, dataDir); //查看IndexWriter里面有多少个索引 int numIndexed = writer.numDocs(); writer.optimize();//优化 writer.commit();//提交 writer.close();//关闭 使其 不占用资源 return numIndexed; } /** * 循环遍历dir下的所有文件并进行索引 * * @param writer * @param dir * @throws IOException */ private static void indexDirectory(IndexWriter writer, File dir) throws IOException { File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) {//如果path表示的是一个目录则返回true //递归 indexDirectory(writer,files[i]); } else if(files[i].getName().endsWith(".txt")) { indexTxtFile(writer,files[i]); }else if(files[i].getName().endsWith(".doc")) { indexWordFile(writer,files[i]); }else if(files[i].getName().endsWith(".xls")) { indexExcelFile(writer,files[i]); } } } /** * 对excel2003文件进行索引 * 读取word文件有两种方法,用jacob包,可以修改生成word文件内容。 * 如果只读取word里的文本内容的话,可以用poi读取word文件, * 先到http://www.ibiblio.