说白了就是两个函数一个建立索引(写),另一个来查找(读),所以涉及到java IO的一些知识。

[java]

  1. import java.io.*;   

  2. import java.nio.file.Paths;  

  3. import java.util.Date;   

  4. import org.apache.lucene.analysis.Analyzer;   

  5. import org.apache.lucene.analysis.standard.StandardAnalyzer;   

  6. import org.apache.lucene.document.Document;   

  7. import org.apache.lucene.document.Field;   

  8. import org.apache.lucene.document.Field.Store;  

  9. import org.apache.lucene.document.LongField;  

  10. import org.apache.lucene.document.StringField;  

  11. import org.apache.lucene.document.TextField;  

  12. import org.apache.lucene.index.*;   

  13. import org.apache.lucene.store.Directory;  

  14. import org.apache.lucene.store.FSDirectory;  

  15. /**  

  16. * This class demonstrate the process of creating index with Lucene  

  17. * for text files  

  18. */   

  19. public class TxtFileIndexer {   

  20.      public static void main(String[] args) throws Exception{   

  21.      //indexDir is the directory that hosts Lucene's index files   

  22.      Directory indexDir = FSDirectory.open(Paths.get("G:\\luceneout"));  

  23.      //dataDir is the directory that hosts the text files that to be indexed   

  24.      File   dataDir  = new File("G:\\downloads\\LJParser_release\\LJParser_Packet\\训练分类用文本\\交通");   

  25.      Analyzer luceneAnalyzer = new StandardAnalyzer(); //新建一个分词器实例  

  26.      IndexWriterConfig config = new IndexWriterConfig(luceneAnalyzer);  

  27.      File[] dataFiles  = dataDir.listFiles(); //所有训练样本文件  

  28.      IndexWriter indexWriter = new IndexWriter(indexDir,config);//构造一个索引写入器   

  29.      long startTime = new Date().getTime();   

  30.      for(int i = 0; i < dataFiles.length; i++){   

  31.           if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){  

  32.                System.out.println("Indexing file " + dataFiles[i].getCanonicalPath()); //返回绝对路径  

  33.                Document document = new Document();//每一个文件都变成一个document对象   

  34.                Reader txtReader = new FileReader(dataFiles[i]);   

  35.                Field field1 = new StringField("path",dataFiles[i].getPath(),Store.YES);  

  36.                Field field2 = new TextField("content",txtReader);  

  37.                Field field3 = new LongField("fileSize", dataFiles[i].length(), Store.YES);   

  38.                Field field4 = new TextField("filename",dataFiles[i].getName(),Store.YES);  

  39.                document.add(field1);  

  40.                document.add(field2);  

  41.                document.add(field3);  

  42.                document.add(field4);  

  43.                indexWriter.addDocument(document); //写进一个索引  

  44.           }   

  45.      }   

  46.      //indexWriter.optimize();   

  47.      indexWriter.close();   

  48.      long endTime = new Date().getTime();   

  49.           

  50.      System.out.println("It takes " + (endTime - startTime)   

  51.          + " milliseconds to create index for the files in directory "  

  52.          + dataDir.getPath());          

  53.      }   

  54. }  

import java.io.*; import java.nio.file.Paths;import java.util.Date; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Store;import org.apache.lucene.document.LongField;import org.apache.lucene.document.StringField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.*; import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;/** * This class demonstrate the process of creating index with Lucene * for text files */ public class TxtFileIndexer {      public static void main(String[] args) throws Exception{      //indexDir is the directory that hosts Lucene's index files      Directory indexDir = FSDirectory.open(Paths.get("G:\\luceneout"));     //dataDir is the directory that hosts the text files that to be indexed      File   dataDir  = new File("G:\\downloads\\LJParser_release\\LJParser_Packet\\训练分类用文本\\交通");      Analyzer luceneAnalyzer = new StandardAnalyzer(); //新建一个分词器实例     IndexWriterConfig config = new IndexWriterConfig(luceneAnalyzer);     File[] dataFiles  = dataDir.listFiles(); //所有训练样本文件     IndexWriter indexWriter = new IndexWriter(indexDir,config);//构造一个索引写入器      long startTime = new Date().getTime();      for(int i = 0; i < dataFiles.length; i++){           if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){               System.out.println("Indexing file " + dataFiles[i].getCanonicalPath()); //返回绝对路径               Document document = new Document();//每一个文件都变成一个document对象                Reader txtReader = new FileReader(dataFiles[i]);                Field field1 = new StringField("path",dataFiles[i].getPath(),Store.YES);               Field field2 = new TextField("content",txtReader);               Field field3 = new LongField("fileSize", dataFiles[i].length(), Store.YES);                Field field4 = new TextField("filename",dataFiles[i].getName(),Store.YES);               document.add(field1);               document.add(field2);               document.add(field3);               document.add(field4);               indexWriter.addDocument(document); //写进一个索引          }      }      //indexWriter.optimize();      indexWriter.close();      long endTime = new Date().getTime();              System.out.println("It takes " + (endTime - startTime)          + " milliseconds to create index for the files in directory "         + dataDir.getPath());             } }

读取索引并查找

[java]

  1. import java.io.File;   

  2. import java.nio.file.Paths;  

  3.   

  4. import org.apache.lucene.analysis.standard.StandardAnalyzer;  

  5. import org.apache.lucene.document.Document;   

  6. import org.apache.lucene.index.DirectoryReader;    

  7. import org.apache.lucene.queryparser.classic.QueryParser;  

  8. import org.apache.lucene.search.*;   

  9. import org.apache.lucene.store.*;  

  10.  /**  

  11.  * This class is used to demonstrate the  

  12.  * process of searching on an existing  

  13.  * Lucene index  

  14.  *  

  15.  */   

  16.  public class TxtFileSearcher {   

  17.      public static void main(String[] args) throws Exception{   

  18.          //存储了索引文件  

  19.          Directory indexDir = FSDirectory.open(Paths.get("G:\\luceneout"));  

  20.          //读取器读取索引文件  

  21.          DirectoryReader ireader = DirectoryReader.open(indexDir);  

  22.          //查找  

  23.          IndexSearcher searcher = new IndexSearcher(ireader);  

  24.          //目的查找字符串  

  25.          String queryStr = "大数据挖掘";  

  26.          //构造一个词法分析器,并将查询结果返回到一个队列  

  27.          QueryParser parser = new QueryParser("content",new StandardAnalyzer());  

  28.          Query query = parser.parse(queryStr);  

  29.          TopDocs docs = searcher.search(query, 100);  

  30.          System.out.print("一共搜索到结果:"+docs.totalHits+"条");  

  31.          //输出查询结果信息  

  32.          for(ScoreDoc scoreDoc:docs.scoreDocs){  

  33.              System.out.print("序号为:"+scoreDoc.doc);  

  34.              System.out.print("评分为:"+scoreDoc.score);  

  35.              Document document = searcher.doc(scoreDoc.doc);  

  36.              System.out.print("路径为:"+document.get("path"));  

  37.              System.out.print("内容为"+document.get("content"));  

  38.              System.out.print("文件大小为"+document.get("fileSize"));  

  39.              System.out.print("文件名为"+document.get("filename"));  

  40.              System.out.println();  

  41.          }     

  42.      }   

  43.  }  

import java.io.File; import java.nio.file.Paths;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader;  import org.apache.lucene.queryparser.classic.QueryParser;import org.apache.lucene.search.*; import org.apache.lucene.store.*; /**  * This class is used to demonstrate the  * process of searching on an existing  * Lucene index  *  */  public class TxtFileSearcher { 	 public static void main(String[] args) throws Exception{ 		 //存储了索引文件		 Directory indexDir = FSDirectory.open(Paths.get("G:\\luceneout"));		 //读取器读取索引文件		 DirectoryReader ireader = DirectoryReader.open(indexDir);		 //查找		 IndexSearcher searcher = new IndexSearcher(ireader);		 //目的查找字符串		 String queryStr = "大数据挖掘";		 //构造一个词法分析器,并将查询结果返回到一个队列		 QueryParser parser = new QueryParser("content",new StandardAnalyzer());		 Query query = parser.parse(queryStr);		 TopDocs docs = searcher.search(query, 100);		 System.out.print("一共搜索到结果:"+docs.totalHits+"条");		 //输出查询结果信息		 for(ScoreDoc scoreDoc:docs.scoreDocs){			 System.out.print("序号为:"+scoreDoc.doc);			 System.out.print("评分为:"+scoreDoc.score);			 Document document = searcher.doc(scoreDoc.doc);			 System.out.print("路径为:"+document.get("path"));			 System.out.print("内容为"+document.get("content"));			 System.out.print("文件大小为"+document.get("fileSize"));			 System.out.print("文件名为"+document.get("filename"));			 System.out.println();		 }	 	 }  }

运行结果

下面是文件目录

两个函数都需要用到分词器,前者是为了配置写入,后者则是为了配置词法分析器来查找