`
liuxinglanyue
  • 浏览: 561756 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

lucene 3.0 中的demo项目部署

阅读更多

转自:bjqincy

 1 在myEclipise 建立一个web 工程,将lucene-3.0.2\src中的code 粘贴到 src中。将lucene-3.0.2\src\jsp下面的 文件黏贴到 webroot 下面,将 lucene-core-3.0.2.jar;lucene-demos-3.0.2.jar 拷贝的lib下,添加jar

在项目中建立一个文件夹 index 文件夹,

 2 org.apache.lucene.demo 下的 IndexHTML。

   java  run as -run as dialig ,

  在 arc 参数中 写

  

  -create -index D:\Tomcat\tomcat5\webapps\lucene\index D:\Tomcat\tomcat5\webapps\lucene\docs 

   提交 。

-create -index  生成的索引文件位置   被索引的文件

  该路径是根据

 运行

 

adding D:/Tomcat/tomcat5/webapps/lucene/docs/demo3.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/demo4.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/fileformats.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/gettingstarted.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/index.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/linkmap.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/lucene-contrib/index.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/queryparsersyntax.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/scoring.html
adding D:/Tomcat/tomcat5/webapps/lucene/docs/skin/images/README.txt
adding D:/Tomcat/tomcat5/webapps/lucene/docs/skin/note.txt
adding D:/Tomcat/tomcat5/webapps/lucene/docs/systemrequirements.html
Optimizing index...
93110 total milliseconds
  生成索引文件

4 修改 configuration.jsp 文件  改成  生成的索引文件位置 

String indexLocation = "D:\\Tomcat\\tomcat5\\webapps\\lucene\\index";
String appfooter = "Apache Lucene Template WebApp 1.0";
  5 运行

-----------------------------

 6 写的两个,lucenc  搜索db, lucene 搜索 txt 文件

     lucenc  搜索db

   JdbcUtil

package com.cee.util.db;

import java.sql.*;

public class JdbcUtil {

	private static Connection con;
	private static Statement stm;
	private static ResultSet rs;
	static {
		try {
			String d = "oracle.jdbc.driver.OracleDriver";
			Class.forName(d);
			getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() {
		String url = "jdbc:oracle:thin:@192.168.2.221:1521:ora92";
		String username = "bzzyeip";
		String pwd = "bzzyeip";
		con = null;
		try {
			con = DriverManager.getConnection(url, username, pwd);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}

	public static ResultSet getResult(String sql) {
		try {
			stm = con.createStatement();
			rs = stm.executeQuery(sql);
			return rs;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;

	}

	public static void printRs(ResultSet rs) {
		try {
			StringBuffer sb = new StringBuffer();
			ResultSetMetaData md = rs.getMetaData();
			int cols = md.getColumnCount();
			while (rs.next()) {
				for (int i = 1; i <= cols; i++) {
					sb.append(md.getColumnName(i) + "=");
					sb.append(rs.getString(i) + " ");
				}
				sb.append("\n");
			}
			System.out.println(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void close() {
		try {
			if (rs != null)
				rs.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		try {
			if (stm != null)
				stm.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		try {
			if (con != null)
				con.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}

	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		String sql = "select * from bzpt_book t";
		ResultSet rs = getResult(sql);
		printRs(rs);
		close();
	}

}
 TestQureryDB

先要创建表

  表的结构是

  

package com.cee.util.db;

import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

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.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;

public class TestQureryDB {

	/**
	 * @throws IOException
	 * @throws LockObtainFailedException
	 * @throws CorruptIndexException
	 * @throws SQLException
	 * 
	 */
	public final static String indexDir = "d:\\TestLucene\\indexDB";

	public static void createIndex() throws CorruptIndexException,
			LockObtainFailedException, IOException, SQLException {
		Date start = new Date();
		File index = new File(indexDir);
		index.mkdir();
		IndexWriter writer = new IndexWriter(FSDirectory.open(index),
				new StandardAnalyzer(Version.LUCENE_CURRENT), true,
				IndexWriter.MaxFieldLength.LIMITED);
		writer.setUseCompoundFile(false);

		String sql = "select * from bzpt_book t";
		ResultSet rs = JdbcUtil.getResult(sql);

		while (rs.next()) {
			Document doc = new Document();
			doc.add(new Field("id", String.valueOf(rs.getString("id")),
					Field.Store.YES, Field.Index.NO));
			doc.add(new Field("cbs", String.valueOf(rs.getString("cbs")),
					Field.Store.YES, Field.Index.ANALYZED));
			//System.out.println(rs.getString("cbs"));
			doc.add(new Field("bz", String.valueOf(rs.getString("bz")),
					Field.Store.YES, Field.Index.ANALYZED));
			writer.addDocument(doc);

		}
		int numIndexed = writer.maxDoc();
		System.out.print(numIndexed);
		Date end = new Date();

		System.out.print(end.getTime() - start.getTime());
		writer.optimize();
		writer.close();

	}

	public static String search(Searcher searcher, String[] q)
			throws IOException, ParseException {
		StringBuffer sb = new StringBuffer();

		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
		String[] fields = { "cbs" };
		Query query = MultiFieldQueryParser.parse(Version.LUCENE_CURRENT, q,
				fields, analyzer);
		TopDocs topDocs = searcher.search(query, 100);// 100是显示队列的Size
		ScoreDoc[] hits = topDocs.scoreDocs;
		System.out.println("共有" + searcher.maxDoc() + "条索引,命中" + hits.length
				+ "条");
		for (int i = 0; i < hits.length; i++) {
			int DocId = hits[i].doc;
			Document document = searcher.doc(DocId);
			sb.append(document.get("id"));
			sb.append(",");
		}
		return sb.toString().substring(0, sb.toString().length() - 1);
	}

	/**
	 * @param args
	 * @throws SQLException
	 * @throws IOException
	 * @throws LockObtainFailedException
	 * @throws CorruptIndexException
	 * @throws ParseException
	 */
	public static void main(String[] args) throws CorruptIndexException,
			LockObtainFailedException, IOException, SQLException,
			ParseException {
		// TODO Auto-generated method stub
		createIndex();
		Searcher searcher = new IndexSearcher(FSDirectory.open(new File(
				indexDir)), true);
		String[] q = { "中国" };
		long start = new Date().getTime();
		System.out.println(search(searcher, q));
		long end = new Date().getTime();
		System.out.println("花费时间:" + (double) (end - start) / 1000 + "秒");

	}

}

 查询txt

package com.cee.util.db;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;

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.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
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.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;

public class TestQueryFile {

	/**
	 * @param args
	 */
	public final static String indexDirSource = "d:\\TestLucene\\fileSource";
	public final static String indexDirObj = "d:\\TestLucene\\fileIndex";

	/**
	 * 生成txt 文件的 index
	 */
	private static void createTextIndex() {

		File fileDir = new File(indexDirSource);
		File indexDir = new File(indexDirObj);
		if (fileDir.exists() == false) {
			System.out.println("不存在" + indexDirSource + "目录");
			System.exit(1);
		}
		if (indexDir.exists() == false) {
			indexDir.mkdir();
		}
		Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

		IndexWriter indexWriter = null;
		long startTime = 0;
		try {
			indexWriter = new IndexWriter(FSDirectory.open(indexDir),
					luceneAnalyzer, true, IndexWriter.MaxFieldLength.LIMITED);

			File[] textFiles = fileDir.listFiles();// 获得 文件
			startTime = new Date().getTime();

			// 增加document到索引去
			for (int i = 0; i < textFiles.length; i++) {
				if (textFiles[i].isFile()
						&& textFiles[i].getName().endsWith(".txt")) {
					System.out.println("File "
							+ textFiles[i].getCanonicalPath() + "正在被索引....");
					String temp = FileReaderAll(
							textFiles[i].getCanonicalPath(), "GBK");//转化成GBK
					System.out.println(temp);
					Document document = new Document();
					// 将txt 文件写到 Document中
					Field FieldPath = new Field("path", textFiles[i].getPath(),
							Field.Store.YES, Field.Index.NO);
					Field FieldBody = new Field("body", temp, Field.Store.YES,
							Field.Index.ANALYZED,
							Field.TermVector.WITH_POSITIONS_OFFSETS);
					document.add(FieldPath);
					document.add(FieldBody);
					indexWriter.addDocument(document);
				}
			}

		} 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();
		} finally {
			try {
				// optimize()方法是对索引进行优化
				indexWriter.optimize();
				indexWriter.close();
				// 测试一下索引的时间
				long endTime = new Date().getTime();
				System.out.println("这花费了" + (endTime - startTime)
						+ " 毫秒来把文档增加到索引里面去!" + fileDir.getPath());
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	private static String FileReaderAll(String FileName, String charset)
			throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				new FileInputStream(FileName), charset));
		String line = new String();
		String temp = new String();

		while ((line = reader.readLine()) != null) {
			temp += line;
		}
		reader.close();
		return temp;
	}

	public static void main(String[] args) throws Exception {
		createTextIndex();
		String queryString = "多伦多";
		Query query = null;
		IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(
				indexDirObj)), true);// read-only
		String fields = "body";
		try {
			QueryParser qp = new QueryParser(Version.LUCENE_CURRENT, fields,
					new StandardAnalyzer(Version.LUCENE_CURRENT));// 
			query = qp.parse(queryString);
		} catch (ParseException e) {
		}
		if (searcher != null) {
			TopDocs topDocs = searcher.search(query, 100);// 100是显示队列的Size
			ScoreDoc[] hits = topDocs.scoreDocs;
			System.out.println("共有" + searcher.maxDoc() + "条索引,命中"
					+ hits.length + "条");
		}
	}
}
 
分享到:
评论

相关推荐

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    lucene 3.0 API 中文帮助文档 chm

    lucene 3.0 API中文帮助,学习的人懂得的

    Lucene3.0之查询类型详解

    在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较低。 - **索引查询**:基于预...

    lucene3.0 分词器

    lucene3.0 中文分词器, 庖丁解牛

    lucene3.0核心jar包

    这里的"lucene3.0核心jar包"是 Lucene 的一个重要版本,发布于2009年,为当时的开发人员提供了构建全文搜索引擎的基础框架。 在 Lucene 3.0 中,以下几个关键知识点值得关注: 1. **索引结构**:Lucene 使用倒排...

    Lucene 3.0 原理与代码分析完整版

    通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分利用其强大功能。这本书是深入研究和应用Lucene不可或缺的...

    lucene3.0资料包

    虽然Lucene3.0本身不直接支持分布式搜索,但可以通过Solr或Elasticsearch等基于Lucene的解决方案实现大规模集群部署,满足高并发和大数据量的检索需求。 10. **API与文档**: Lucene3.0提供了详尽的Java API,...

    Lucene3.0全文信息检索

    在Lucene 3.0版本中,它引入了多项优化和改进,进一步提升了检索效率和用户体验。 **一、Lucene 3.0 的核心概念** 1. **索引**:Lucene首先将文档内容转换成倒排索引(Inverted Index),这是一个数据结构,用于...

    lucene3.0 实例

    此外,还需要确保你已经安装了 Lucene 3.0 库,并将其添加到项目的类路径中。 总结来说,Lucene 3.0 实例展示了如何在 Java 环境下构建一个简单的全文搜索引擎。通过生成索引和执行搜索,我们可以理解 Lucene 的...

    lucene3.0-highlighter.jar

    lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的

    lucene3.0全文检索入门实例

    首先,你需要下载 Lucene 3.0 的发行版,并将其添加到你的项目类路径中。确保你的开发环境支持 Java 5 或更高版本,因为 Lucene 3.0 需要这个版本的 JVM。 **2. 创建索引** 创建索引是全文检索的第一步。在 Lucene ...

    lucene3.0庖丁+索引搜索程序

    通过分析这些示例,读者可以了解到如何在实际项目中应用Lucene3.0。 总结,Lucene3.0是Java世界中不可或缺的全文检索工具,它的索引构建、查询处理和结果排序机制为我们提供了高效且灵活的搜索功能。通过深入学习其...

    lucene3.0使用介绍及实例

    在本文中,我们将深入探讨Lucene 3.0版本,了解其核心概念、功能特性,并通过实例来展示如何使用这个强大的工具。 ### 1. Lucene 3.0核心概念 #### 1.1 文档与字段 在Lucene中,数据是以文档(Document)的形式...

    Lucene3.0 Demo

    虽然描述中提到Lucene 3.0的索引更新未实现,但实际情况是Lucene自早期版本就已经支持了索引更新。`IndexWriter`类提供了多种方法来更新已存在的索引: - **添加文档**:使用`addDocument()`方法可以向索引中添加新...

    lucene 3.0 API 中文帮助文档

    在3.0版本中,Lucene提供了多种预定义的Analyzer,如StandardAnalyzer,它们可以处理不同语言的文本。 2. **Document**: Document对象是信息存储的基本单元,它可以包含多个Field,每个Field代表文档的一个属性。...

    lucene 3.0 入门实例

    在 `luceneDemo` 项目中,你应该能看到如何组织代码实现这些操作的示例。通过运行这个例子,你将对 Lucene 3.0 的基本使用有更深入的理解。 总的来说,Lucene 3.0 提供了一套完整的工具集,用于构建高效、灵活的...

Global site tag (gtag.js) - Google Analytics