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 + "\t ISBN:"+doc.get("ISBN")+"\t bookname:"+doc.get("bookname")+"\t 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("中国");
       
      }

}

用Lucene检索数据库的更多相关文章

  1. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  2. [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍

    声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...

  3. 3.3 Lucene检索原理

    Lucene是一个高效的,基于Java的全文检索库[1].所以在介绍Lucene的检索功能之前,我们要先了解一下全文检索以及Lucene的索引结构. 一.全文检索的基本原理 1. 数据的分类 什么是全 ...

  4. Elasticsearch原理学习--为什么Elasticsearch/Lucene检索可以比MySQL快?

    转载于:http://vlambda.com/wz_wvS2uI5VRn.html 同样都可以对数据构建索引并通过索引查询数据,为什么Lucene或基于Lucene的Elasticsearch会比关系 ...

  5. Lucene学习之一:使用lucene为数据库表创建索引,并按关键字查询

    最近项目中要用到模糊查询,开始研究lucene,期间走了好多弯路,总算实现了一个简单的demo. 使用的lucene jar包是3.6版本. 一:建立数据库表,并加上测试数据.数据库表:UserInf ...

  6. lucene 结合数据库做搜索

    package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta ...

  7. Lucene检索提高性能的几个方式

    1.采用最新版本的Lucene 2.索引文件存储采用本地文件系统,如果需要挂载远程系统,请采用 readonly方式. 3.当然采用更好的硬件,更高I/O的磁盘 4.提高OS 缓存,调整参数 5.提高 ...

  8. PHP项目:如何用PHP高并发检索数据库?

    对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案: 方案一:使用队列来实现 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧 比如有1 ...

  9. lucene 检索流程整理笔记

随机推荐

  1. spark能否取代Hadoop?

    大数据的浪潮风靡全球的时候,Spark火了.在国外 Yahoo!.Twitter.Intel.Amazon.Cloudera 等公司率先应用并推广 Spark 技术,在国内阿里巴巴.百度.淘宝.腾讯. ...

  2. 大数据:从开源告诉你身边的IT故事

    最近我们Team利用Dream分布式计算平台,做了这样一件事情,将Github的大量数据通过爬虫抓取下来,通过分析后,我们抽取最近一年中部分的开发者和项目信息,得到了如下有趣的信息,故分享之,数据原汁 ...

  3. android之对话、单复框的使用

    对话框 通过builder来构建一个单选框 package xidian.dy.com.chujia; import android.content.DialogInterface; import a ...

  4. ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装

    1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...

  5. java操作word

    一个使用Apache POI写word文档的实例: 1 package apache.poi; 2 3 import java.io.ByteArrayInputStream; 4 import ja ...

  6. The web application [/codeMarket] registered the JBDC driver[.........] but failed to unregister it when the web application was stopped. To prevent

    如果你报错了上面的这个严重,那么你的tomcat版本一定是在6.0.25之上的 原因:tomcat 6.025以后在sever.xml中引入了内存泄露侦测,对于垃圾回收不能处理的对像,它就会做日志. ...

  7. iOS边练边学--菜单悬停效果的实现思路

  8. Erlang第一课----基本变量

    1.(in Erlang shell)A sequence of expressions must be terminated with a period followed by whitespace ...

  9. [Angularjs]视图和路由(二)

    写在前面 上篇文章主要介绍了视图和路由的基本概念,并在文章最后举了一个简单的使用案例.这篇文章将继续学习路由的配置,及相关参数的说明. 系列文章 [Angularjs]ng-select和ng-opt ...

  10. vi显示行号

    vi显示行号   :set nu         带行号查看,并不改变文件内容:set nonu     取消带行号查看在每个用户的主目录下,都有一个 vi 的配置文件".vimrc&quo ...