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. java内存优化牛刀小试

    小猿做了两年的c++,上个月竟然被调到java项目,于是第一篇随笔就想八一八java的内存优化. 首先优化这种事,肯定是应该放到最后去做的,不过在写代码的过程中养成良好的习惯也是很重要的.在这里先推荐 ...

  2. 一次ssl的手动实现——加密算法的简单扫荡

    引言 最近LZ在公司里接了一个活,要发布一些服务给公司的合作伙伴调用.这种工作LZ可谓是轻车熟路,之前已经做了无数服务端.不过与以往不同的是,这次的服务是要发布在互联网上的,因此不能再像之前的套路一样 ...

  3. SequoiaDB 系列之六 :源码分析之coord节点

    好久不见. 在上一篇SequoiaDB 系列之五   :源码分析之main函数,有讲述进程开始运行时,会根据自身的角色,来初始化不同的CB(控制块,control block). 在之前的一篇Sequ ...

  4. [C#基础]Func和Action学习

    目录 委托 Action Func 总结 委托 委托的那些事 关于委托的基本定义,在很久之前的这篇文章中,有个简单的介绍.稍微回顾一下. 委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函 ...

  5. 配置域主DNS服务器

    一.DNS服务器的类型 ①Primary DNS Server(Master) 一个域的主服务器保存着该域的zone配置文件,该域所有的配置.更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个 ...

  6. 手工部署项目到tomcat

    正确的方法是,在eclipse里面的项目伤右键,然后Export,然后在弹出的框当中选择导出类型,这里选择web下面的WAR file,然后下一步,选择导出到哪里,然后把导出的war文件放到tomca ...

  7. Html-Css-div标签嵌套浮动div标签时无法撑开外部div的解决

    当DIV1里面嵌套有一个DIV2,当DIV2设置了浮动,那么DIV1是无法被撑开的 当DIV1里面嵌套有一个DIV2,当DIV2设置了浮动,那么DIV1是无法被撑开的,也就是说DIV2在这里相当于浮在 ...

  8. 1.Android入门学习

    现在移动开发Android.iOS都很普遍,本人也是第一次学习Android,所以记录自己学习Android点滴,刚学不久肯定有很多不足地方望大家批评指正. 一.Android工具环境搭配 网上已经有 ...

  9. web.xml中/与/*的区别

    1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...

  10. BZOJ4241 历史研究

    Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...