江西广告网

标题: java之lucene [打印本页]

作者: 12345    时间: 2009-2-17 10:57
标题: java之lucene
网上流行的lucene使用方法大部分是lucene1.4左右,而现在的lucene已经到了2.x,以下是lucene2.2.0的事例 1.像往常的框架一样,自然需要将其所需的jar包导入 导入lucene-core-2.2.0.jar(最新的jar) //--------------------------------------------------------- 2.创建索引(Index) public void createIndex(){ File indexDir=new File("f:/lucene/"); //将索引写入到"f:/lucene/"下; long start=new Date().getTime(); StandardAnalyzer sa=new StandardAnalyzer(); //创建标准分析器 try { IndexWriter indexWriter=new IndexWriter(indexDir,sa,true); //需要Index写入器,(创建) indexWriter.setMergeFactor(100); indexWriter.setMaxMergeDocs(100); indexWriter.setMaxFieldLength(5000); while(rs.next()){ Document doc=new Document(); //创建文档(document)对象,rs是recordset对象,事先已经从数据库取出! doc.add(new Field("productName",rs.getString("productName"),Field.Store.YES,Field.Index.TOKENIZED)); //为document添加好field doc.add(new Field("unitprice",rs.getString("unitprice"),Field.Store.YES,Field.Index.TOKENIZED)); indexWriter.addDocument(doc); //别忘记,将document加到写入器indexWriter } indexWriter.optimize(); //进行优化 indexWriter.close();//关闭 } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (LockObtainFailedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } long end=new Date().getTime(); System.out.println("索引创建完毕,用时:" (end-start) "毫秒"); } //--------------------------------------------------------------- 3.创建检索方法(searcher) public Hits searcher(String queryString){ Hits hits=null; try { IndexSearcher indexSearcher=new IndexSearcher("f:/lucene/"); //创建从"f:/lucene"检索数据的检索器 String[] fields={"productName","unitprice"}; QueryParser queryParser=new MultiFieldQueryParser(fields,new StandardAnalyzer()); //创建查询分析器 Query query= queryParser.parse(queryString); //查询分析器解析 查询条件 hits=indexSearcher.search(query);//检索器检索出所有符合条件的数据,封成hits返回. return hits; } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } [1] [2] [3] //------------------------------------------------------------------- 4.调用 检索,开始 工作 public static void main(String[] args) { Lucene lu= new Lucene(); lu.getResultSet(); lu.createIndex(); Hits hits= lu.searcher("tofu"); for(int i=0;i<hits.length();i ){ try { Document doc=hits.doc(i); System.out.print(doc.get("productName")); System.out.print("|"); System.out.println(doc.get("unitprice")); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //---------------------------------------------------------------------------------------------------- 一下为全部的java代码; package com.sk.dome; import java.io.File; 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 java.util.Date; import java.util.List; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.store.LockObtainFailedException; public class Lucene { private ResultSet rs=null; private Connection conn; public ResultSet getResultSet(){ try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=northwind;user=sa;password="); PreparedStatement ps=conn.prepareStatement("select productName,Unitprice from products"); rs=ps.executeQuery(); return rs; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } 上一页 [1] [2] [3] return null; } public void createIndex(){ File indexDir=new File("f:/lucene/") long start=new Date().getTime(); StandardAnalyzer sa=new StandardAnalyzer(); try { IndexWriter indexWriter=new IndexWriter(indexDir,sa,true); indexWriter.setMergeFactor(100); indexWriter.setMaxMergeDocs(100); indexWriter.setMaxFieldLength(5000); while(rs.next()){ Document doc=new Document(); doc.add(new Field("productName",rs.getString("productName"),Field.Store.YES,Field.Index.TOKENIZED)); doc.add(new Field("unitprice",rs.getString("unitprice"),Field.Store.YES,Field.Index.TOKENIZED)); indexWriter.addDocument(doc); } indexWriter.optimize(); indexWriter.close(); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (LockObtainFailedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } long end=new Date().getTime(); System.out.println("索引创建完毕,用时:" (end-start) "毫秒"); } public Hits searcher(String queryString){ Hits hits=null; try { IndexSearcher indexSearcher=new IndexSearcher("f:/lucene/"); String[] fields={"productName","unitprice"}; QueryParser queryParser=new MultiFieldQueryParser(fields,new StandardAnalyzer()); Query query= queryParser.parse(queryString); hits=indexSearcher.search(query); return hits; } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void main(String[] args) { Lucene lu= new Lucene(); lu.getResultSet(); lu.createIndex(); Hits hits= lu.searcher("tofu"); for(int i=0;i<hits.length();i ){ try { Document doc=hits.doc(i); System.out.print(doc.get("productName")); System.out.print("|"); System.out.println(doc.get("unitprice")); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 上一页 [1] [2] [3]




欢迎光临 江西广告网 (http://bbs.jxadw.com/) Powered by Discuz! X3.2