Lucene3.0 对数据库数据进行搜索

Java代码   收藏代码
  1. package com.orifound.aiim.web.util;  
  2.   
  3. import java.io.File;  
  4. import java.sql.Connection;  
  5. import java.sql.DriverManager;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.ResultSet;  
  8.   
  9. import org.apache.lucene.analysis.Analyzer;  
  10. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  11. import org.apache.lucene.document.Document;  
  12. import org.apache.lucene.document.Field;  
  13. import org.apache.lucene.index.IndexWriter;  
  14. import org.apache.lucene.queryParser.QueryParser;  
  15. import org.apache.lucene.search.IndexSearcher;  
  16. import org.apache.lucene.search.Query;  
  17. import org.apache.lucene.search.ScoreDoc;  
  18. import org.apache.lucene.search.TopScoreDocCollector;  
  19. import org.apache.lucene.store.Directory;  
  20. import org.apache.lucene.store.FSDirectory;  
  21. import org.apache.lucene.util.Version;  
  22.   
  23. /** 
  24.  *  
  25.  * @描述 对数据库数据进行搜索 
  26.  */  
  27. public class LuceneUtil {  
  28.   
  29.     // 保存路径  
  30.     private static String INDEX_DIR = "D:\\Lucene\\index";  
  31.     private static Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
  32.     private static Directory directory = null;  
  33.   
  34.     /** 
  35.      * 建立索引 
  36.      * @param args 
  37.      */  
  38.     public static void index() throws Exception{  
  39.         directory = FSDirectory.open(new File(INDEX_DIR));  
  40.         File indexFile = new File(INDEX_DIR);  
  41.         if (!indexFile.exists()) {  
  42.             indexFile.mkdirs();  
  43.         }  
  44.           
  45.         //if (new File(INDEX_DIR).listFiles().length <= 0) {  
  46.             IndexWriter indexWriter = new IndexWriter(directory, analyzer,IndexWriter.MaxFieldLength.LIMITED);  
  47.   
  48.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
  49.             Connection connection = DriverManager.getConnection("jdbc:sqlserver://bbs:1433;DatabaseName=AIIM_DB;userName=sa;password=123456");  
  50.             PreparedStatement statement = connection.prepareStatement("select * from ArchivesInfoAttachedFileFullTextInfo");  
  51.             ResultSet resultSet = statement.executeQuery();  
  52.             while (resultSet.next()) {  
  53.                 Document document = new Document();  
  54.                 document.add(new Field("ID", resultSet.getString("ID"),Field.Store.YES, Field.Index.ANALYZED));  
  55.                 document.add(new Field("FullText", resultSet.getString("FullText"), Field.Store.YES, Field.Index.ANALYZED));  
  56.                 indexWriter.addDocument(document);  
  57.             }  
  58.               
  59.             indexWriter.optimize();// 优化  
  60.             indexWriter.close();  
  61.             resultSet.close();  
  62.             statement.close();  
  63.             connection.close();  
  64.         //}  
  65.     }  
  66.       
  67.     /** 
  68.      * 关键字查询 
  69.      * @param str 
  70.      * @throws Exception 
  71.      */  
  72.     public static void search(String str) throws Exception{  
  73.         directory = FSDirectory.open(new File(INDEX_DIR));  
  74.         IndexSearcher indexSearcher = new IndexSearcher(directory, true);  
  75.           
  76.         String fieldname = "FullText";  
  77.         QueryParser queryParser = new QueryParser(Version.LUCENE_30,fieldname, analyzer);  
  78.         Query query = queryParser.parse(str);  
  79.         TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.create(100true);  
  80.         indexSearcher.search(query, topScoreDocCollector);  
  81.         ScoreDoc[] scoreDocs = topScoreDocCollector.topDocs().scoreDocs;  
  82.         for (int i = 0; i < scoreDocs.length; i++) {  
  83.             Document doc = indexSearcher.doc(scoreDocs[i].doc);  
  84.             System.out.println(doc.get("ID"));  
  85.             System.out.println("------------------------------------------------");  
  86.         }  
  87.     }  
  88.       
  89.       
  90.     public static void main(String[] args) {      
  91.         try {  
  92.             //LuceneUtil.index();  
  93.             LuceneUtil.search("成绩");  
  94.         } catch (Exception e) {  
  95.             e.printStackTrace();  
  96.         }  
  97.     }  

猜你喜欢

转载自zzc1684.iteye.com/blog/2182502
今日推荐