- 浏览: 229951 次
- 性别:
- 来自: beijing
文章分类
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
lucene 3.0 API中文帮助,学习的人懂得的
在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较低。 - **索引查询**:基于预...
lucene3.0 中文分词器, 庖丁解牛
这里的"lucene3.0核心jar包"是 Lucene 的一个重要版本,发布于2009年,为当时的开发人员提供了构建全文搜索引擎的基础框架。 在 Lucene 3.0 中,以下几个关键知识点值得关注: 1. **索引结构**:Lucene 使用倒排...
通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分利用其强大功能。这本书是深入研究和应用Lucene不可或缺的...
虽然Lucene3.0本身不直接支持分布式搜索,但可以通过Solr或Elasticsearch等基于Lucene的解决方案实现大规模集群部署,满足高并发和大数据量的检索需求。 10. **API与文档**: Lucene3.0提供了详尽的Java API,...
在Lucene 3.0版本中,它引入了多项优化和改进,进一步提升了检索效率和用户体验。 **一、Lucene 3.0 的核心概念** 1. **索引**:Lucene首先将文档内容转换成倒排索引(Inverted Index),这是一个数据结构,用于...
此外,还需要确保你已经安装了 Lucene 3.0 库,并将其添加到项目的类路径中。 总结来说,Lucene 3.0 实例展示了如何在 Java 环境下构建一个简单的全文搜索引擎。通过生成索引和执行搜索,我们可以理解 Lucene 的...
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
首先,你需要下载 Lucene 3.0 的发行版,并将其添加到你的项目类路径中。确保你的开发环境支持 Java 5 或更高版本,因为 Lucene 3.0 需要这个版本的 JVM。 **2. 创建索引** 创建索引是全文检索的第一步。在 Lucene ...
通过分析这些示例,读者可以了解到如何在实际项目中应用Lucene3.0。 总结,Lucene3.0是Java世界中不可或缺的全文检索工具,它的索引构建、查询处理和结果排序机制为我们提供了高效且灵活的搜索功能。通过深入学习其...
在本文中,我们将深入探讨Lucene 3.0版本,了解其核心概念、功能特性,并通过实例来展示如何使用这个强大的工具。 ### 1. Lucene 3.0核心概念 #### 1.1 文档与字段 在Lucene中,数据是以文档(Document)的形式...
虽然描述中提到Lucene 3.0的索引更新未实现,但实际情况是Lucene自早期版本就已经支持了索引更新。`IndexWriter`类提供了多种方法来更新已存在的索引: - **添加文档**:使用`addDocument()`方法可以向索引中添加新...
在3.0版本中,Lucene提供了多种预定义的Analyzer,如StandardAnalyzer,它们可以处理不同语言的文本。 2. **Document**: Document对象是信息存储的基本单元,它可以包含多个Field,每个Field代表文档的一个属性。...
在 `luceneDemo` 项目中,你应该能看到如何组织代码实现这些操作的示例。通过运行这个例子,你将对 Lucene 3.0 的基本使用有更深入的理解。 总的来说,Lucene 3.0 提供了一套完整的工具集,用于构建高效、灵活的...