• 用Lucene检索数据库


    http://blog.sina.com.cn/s/blog_82ac67c101012r9z.html

    package com.javabean;

    import java.io.File;
    import java.io.IOException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;

    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.Index;
    import org.apache.lucene.document.Field.Store;
    import org.apache.lucene.index.IndexReader;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.index.IndexWriterConfig;
    import org.apache.lucene.queryParser.MultiFieldQueryParser;
    import org.apache.lucene.queryParser.ParseException;
    import org.apache.lucene.queryParser.QueryParser;
    import org.apache.lucene.queryParser.QueryParser.Operator;
    import org.apache.lucene.search.IndexSearcher;
    import org.apache.lucene.search.Query;
    import org.apache.lucene.search.ScoreDoc;
    import org.apache.lucene.search.TopDocs;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    import org.apache.lucene.store.SimpleFSDirectory;
    import org.apache.lucene.util.Version;

    public class lucene
    {
     public void createIndexFile() {    
             IndexWriter indexWriter=null;    
              try {    
                 // 需要的分词器    
                 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);    
                 // 创建的是哪个版本的IndexWriterConfig    
                 IndexWriterConfig indexWriterConfig = new IndexWriterConfig(    
                         Version.LUCENE_36, analyzer);    
                  // 创建系统文件-----    

          Directory directory = FSDirectory.open(new File(indexPath));

          

         // 这里千万不能用SimpleFSDirectory, 不然会报错, 找错找到你哭
                 /* Directory directory = new SimpleFSDirectory(new File("D:\tomcat-6.0.35\webapps\jsp_flex\index"));    */


                  indexWriter = new IndexWriter(directory,indexWriterConfig);
                  //访问数据库拿数据
                  DBConnect db = new DBConnect();
            String sql = "select * from book";
            ResultSet rs = db.select(sql);
            while(rs.next())
            {
                  //indexWriter添加索引    
                  Document doc=new Document();    
                  //文本中添加内容      
                  doc.add(new Field("ISBN",rs.getString(1).toString(),Store.YES,Index.ANALYZED));    
                  doc.add(new Field("bookname",rs.getString(2).toString(),Store.YES,Index.ANALYZED));    
                  doc.add(new Field("author",rs.getString(3).toString(),Store.YES,Index.ANALYZED));   
                  doc.add(new Field("leibie",rs.getString(6).toString(),Store.YES,Index.ANALYZED));
                  doc.add(new Field("jianjie",rs.getString(10).toString(),Store.YES,Index.ANALYZED));
                  //添加到索引中去   
                  indexWriter.addDocument(doc);
            }
                         
              } catch (IOException e) {       
                  e.printStackTrace();    
              } catch (SQLException e) {
         e.printStackTrace();
        }finally{    
                  if(indexWriter!=null){    
                      try {  
                       indexWriter.commit();
                          indexWriter.close();    
                      }  catch (IOException e) {        
                          e.printStackTrace();    
                      }    
                  }    
              }    
          }    
         
          public void seacher(String queryString) throws IOException
          {
           FSDirectory fs;
           try {   
            fs =  FSDirectory.open(new File("D:\tomcat-6.0.35\webapps\jsp_flex\index"));  
            IndexReader ir = IndexReader.open(fs);  
            long start  = System.currentTimeMillis();  
            IndexSearcher search = new IndexSearcher(ir);  
            String key = queryString;  
            String fieds[] = new String[]{"ISBN","bookname","author","leibie","jianjie"};  
            Analyzer ik = new StandardAnalyzer(Version.LUCENE_36);   
            MultiFieldQueryParser m = new MultiFieldQueryParser(Version.LUCENE_36, fieds, ik);  
            m.setDefaultOperator(Operator.AND);  
            Query query = m.parse(key) ;  
               ScoreDoc[] hits = search.search(query, null, 1000).scoreDocs;   
            System.out.println("共命中"+hits.length+"条记录");     
            for(ScoreDoc scoreDoc:hits)  
            {  
                Document doc= search.doc(scoreDoc.doc);  
                System.out.println(scoreDoc.score + " ISBN:"+doc.get("ISBN")+" bookname:"+doc.get("bookname")+" leibie:"+doc.get("leibie"));  
            }             
               System.out.println("执行时间:"+(System.currentTimeMillis()-start)+"毫秒");  
             }
           catch (IOException e)
           {  
             e.printStackTrace();  
           } catch (ParseException e) {
            e.printStackTrace();  
              }    
           
           
          }

    public static void main(String[] args) throws IOException
          {    
           lucene test = new lucene();
          // test.createIndexFile();
           test.seacher("中国");
           
          }

    }

  • 相关阅读:
    SQL语句-用sql语句得到表中所有字段的名字
    SQL语句-判断数据库中是否有这张表
    Java开发-创建第一个项目hello world
    MFC-一个很简单的程序最小化到托盘,带右键菜单带图标
    Everything SDK-基于名称快速定位文件和文件夹。
    NX二次开发-基于PycharmIDE的NXOpen Python开发环境配置
    手动局域网搭建FTP服务器
    FreeCAD二次开发-基于控制台模式FC外部开发
    FreeCAD二次开发-基于PyQT对话框与FC交互的开发
    实例开发-NX二次开发手动截图工具
  • 原文地址:https://www.cnblogs.com/apem/p/3912767.html
Copyright © 2020-2023  润新知