luence全文检索(数据库检索)


注解:从数据库中查询所有数据然后放入luence中,然后在luence来检索

package com.zhu.demo;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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.TextField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
/**
 *
 * Lucene与数据库结合使用
 *
 * @author YipFun
 */
public class LuceneDemo06 {
    private static final String driverClassName="com.mysql.jdbc.Driver";
    private static final String url="??characterEncoding=utf-8";
    private static final String username="?";
    private static final String password="?";

    private static final Version version = Version.LUCENE_4_9;
    private Directory directory = null;
    private DirectoryReader ireader = null;
    private IndexWriter iwriter = null;
    //private IKAnalyzer analyzer;
    private Analyzer analyzer;
    private Connection conn;

    public LuceneDemo06() {
        directory = new RAMDirectory();            
    }
    public IndexSearcher getSearcher(){
        try {
            if(ireader==null) {
                ireader = DirectoryReader.open(directory);
            } else {
                DirectoryReader tr = DirectoryReader.openIfChanged(ireader) ;
                if(tr!=null) {
                    ireader.close();
                    ireader = tr;
                }
            }
            return new IndexSearcher(ireader);
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public Connection getConnection(){
        if(this.conn == null){
            try {
                Class.forName(driverClassName);
                conn = DriverManager.getConnection(url, username, password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return conn;
    }
    private Analyzer getAnalyzer(){
        if(analyzer == null){
            return new StandardAnalyzer();
        }else{
            return analyzer;
        }
    }

    public void createIndex(){
        Connection conn = getConnection();
        ResultSet rs = null;
        PreparedStatement pstmt = null;
        if(conn == null){
            System.out.println("get the connection error...");
            return ;
        }
        String sql = "select * from es_goods";
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            IndexWriterConfig iwConfig=new IndexWriterConfig(getAnalyzer());
            iwConfig.setOpenMode(OpenMode.CREATE);
            iwriter = new IndexWriter(directory,iwConfig);
            while(rs.next()){
                Integer goods_id = rs.getInt(1);             
                String name = rs.getString(2);
                String sn= rs.getString(3);
                int band_id=rs.getInt(4);
                int cat_id = rs.getInt(5);
                int type_id= rs.getInt(6);
                String goods_type = rs.getString(7);
                String unit = rs.getString(8);
                Double weight = rs.getDouble(9);
                Integer market_enable = rs.getInt(10);  
                String brief = rs.getString(11);
                Long intro = rs.getLong(12);
                Double price = rs.getDouble(13);
                Double cost = rs.getDouble(14);
                Double mktprice = rs.getDouble(15);
                String params = rs.getString(16);
                String specs = rs.getString(17);  
                Integer have_spec = rs.getInt(18);
                Long adjuncts = rs.getLong(19);
                Integer create_time = rs.getInt(20);
                Integer last_modify = rs.getInt(21);
                Integer view_count = rs.getInt(22);
                Integer buy_count = rs.getInt(23);
                Integer disabled = rs.getInt(24);
                Integer store = rs.getInt(25);
                Integer enable_store = rs.getInt(26);
                Integer point = rs.getInt(27);
                String page_title = rs.getString(28);
                String meta_keywords = rs.getString(29);
                String meta_description = rs.getString(30);
                String p20 = rs.getString(31);
                String p19 = rs.getString(32);
                String p18= rs.getString(33);  
                String p17= rs.getString(34);
                String p16= rs.getString(35);
                String p15= rs.getString(36);
                String p14= rs.getString(37);
                String p13= rs.getString(38);
                String p12 = rs.getString(39);
                String p11= rs.getString(40);
                String p10= rs.getString(41);  
                String p9= rs.getString(42);
                String p8= rs.getString(43);
                String p7= rs.getString(44);
                String p6= rs.getString(45);
                String p5 = rs.getString(46);
                String p4= rs.getString(47);
                Integer p3= rs.getInt(48);
                String p2= rs.getString(49);  
                String p1 = rs.getString(50);
                Integer sord= rs.getInt(51);
                int have_field= rs.getInt(52);
                int grade = rs.getInt(53);
                Long goods_comment = rs.getLong(54);
                Integer is_pack= rs.getInt(55);
                String thumbnail= rs.getString(56);
                String big= rs.getString(57);
                String small= rs.getString(58);
                String original= rs.getString(59);
                String p21= rs.getString(60);
                String p22= rs.getString(61);
                String p23= rs.getString(62);
                
                Document doc = new Document();
                
                doc.add(new TextField("goods_id", goods_id+"",Field.Store.YES));//1
                doc.add(new TextField("name", name+"",Field.Store.YES));//2
                doc.add(new TextField("sn", sn+"",Field.Store.YES));//3
                doc.add(new TextField("band_id", band_id+"",Field.Store.YES));//4
                doc.add(new TextField("cat_id", cat_id+"",Field.Store.YES));//5
                doc.add(new TextField("type_id", type_id+"",Field.Store.YES));//6
                doc.add(new TextField("goods_type", goods_type+"",Field.Store.YES));//7
                doc.add(new TextField("unit", unit+"",Field.Store.YES));//8
                doc.add(new TextField("weight", weight+"",Field.Store.YES));//9
                doc.add(new TextField("market_enable", market_enable+"",Field.Store.YES));//11
                doc.add(new TextField("brief", brief+"",Field.Store.YES));//12
                doc.add(new TextField("intro", intro+"",Field.Store.YES));//13
                doc.add(new TextField("price", price+"",Field.Store.YES));//14
                doc.add(new TextField("cost", cost+"",Field.Store.YES));//15
                doc.add(new TextField("mktprice", mktprice+"",Field.Store.YES));//16
                doc.add(new TextField("params", params+"",Field.Store.YES));//17
                doc.add(new TextField("specs", specs+"",Field.Store.YES));//18
                doc.add(new TextField("have_spec", have_spec+"",Field.Store.YES));//19
                doc.add(new TextField("adjuncts", adjuncts+"",Field.Store.YES));//20
                doc.add(new TextField("create_time", create_time+"",Field.Store.YES));//21
                doc.add(new TextField("last_modify", last_modify+"",Field.Store.YES));//23
                doc.add(new TextField("view_count", view_count+"",Field.Store.YES));//24
                doc.add(new TextField("buy_count", buy_count+"",Field.Store.YES));//25
                doc.add(new TextField("disabled", disabled+"",Field.Store.YES));//26
                doc.add(new TextField("store", store+"",Field.Store.YES));//27
                doc.add(new TextField("enable_store", enable_store+"",Field.Store.YES));//28
                doc.add(new TextField("point", point+"",Field.Store.YES));//29
                doc.add(new TextField("page_title", page_title+"",Field.Store.YES));//30
                doc.add(new TextField("meta_keywords", meta_keywords+"",Field.Store.YES));//31
                doc.add(new TextField("meta_description", meta_description+"",Field.Store.YES));//32
                 doc.add(new TextField("p20", p20+"",Field.Store.YES));//33
                doc.add(new TextField("p19", p19+"",Field.Store.YES));//34
                doc.add(new TextField("p18", p18+"",Field.Store.YES));//35
                doc.add(new TextField("p17", p17+"",Field.Store.YES));//36
                
                doc.add(new TextField("p16", p16+"",Field.Store.YES));//37
                doc.add(new TextField("p15", p15+"",Field.Store.YES));//38
                doc.add(new TextField("p14", p14+"",Field.Store.YES));//39
                doc.add(new TextField("p13", p13+"",Field.Store.YES));//40
                doc.add(new TextField("p12", p12+"",Field.Store.YES));//41
                doc.add(new TextField("p11", p11+"",Field.Store.YES));//42
                doc.add(new TextField("p10", p10+"",Field.Store.YES));//43
                doc.add(new TextField("p9", p9+"",Field.Store.YES));//44
                doc.add(new TextField("p8", p8+"",Field.Store.YES));//45
                doc.add(new TextField("p7", p7+"",Field.Store.YES));//46
                doc.add(new TextField("p6", p6+"",Field.Store.YES));//47
                doc.add(new TextField("p5", p5+"",Field.Store.YES));//48
                doc.add(new TextField("p4", p4+"",Field.Store.YES));//49
                doc.add(new TextField("p3", p3+"",Field.Store.YES));//50
                doc.add(new TextField("p2", p2+"",Field.Store.YES));//51
                doc.add(new TextField("p1", p1+"",Field.Store.YES));//52
                doc.add(new TextField("sord", sord+"",Field.Store.YES));//53
                doc.add(new TextField("have_field", have_field+"",Field.Store.YES));//54
                doc.add(new TextField("grade", grade+"",Field.Store.YES));//55
                doc.add(new TextField("goods_comment", goods_comment+"",Field.Store.YES));//56
                doc.add(new TextField("is_pack", is_pack+"",Field.Store.YES));//57
                doc.add(new TextField("thumbnail", thumbnail+"",Field.Store.YES));//58
                doc.add(new TextField("big", big+"",Field.Store.YES));//59
                doc.add(new TextField("small", small+"",Field.Store.YES));//60
                doc.add(new TextField("original", original+"",Field.Store.YES));//61
                doc.add(new TextField("p21", p21+"",Field.Store.YES));//62
                doc.add(new TextField("p22", p22+"",Field.Store.YES));//63
                doc.add(new TextField("p23", p23+"",Field.Store.YES));//64           
                iwriter.addDocument(doc);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(iwriter != null)
                iwriter.close();
                rs.close();
                pstmt.close();
                if(!conn.isClosed()){
                    conn.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public void searchByTerm(String field,String keyword,int num) throws Exception{
         IndexSearcher isearcher = getSearcher();
         Analyzer analyzer =  getAnalyzer();
        //使用QueryParser查询分析器构造Query对象
        QueryParser qp = new QueryParser(field,analyzer);
        //这句所起效果?
       // qp.setDefaultOperator(QueryParser.OR_OPERATOR);
        qp.setDefaultOperator(QueryParser.AND_OPERATOR);
        try {
            Query query = qp.parse(keyword);
            ScoreDoc[] hits;

            //注意searcher的几个方法
            hits = isearcher.search(query, null, num).scoreDocs;
           // assertEquals(1, hits.length);
            System.out.println("the names is =");
            for (int i = 0; i < hits.length; i++) {
                Document doc = isearcher.doc(hits[i].doc);
                System.out.print(doc.get("goods_id")+" ");
                System.out.println(doc.get("name")+" ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        LuceneDemo06 ld = new LuceneDemo06();
        ld.createIndex();
        ld.searchByTerm("name", "平安", 100);
    }
}

 

转载于:https://www.cnblogs.com/xzjf/p/7110052.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值