`
zzc1684
  • 浏览: 1228928 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Lucene3.0 对数据库数据进行搜索

阅读更多
Java代码  收藏代码
  1. package com.orifound.aiim.web.util;  
  2.   
  3. import java.io.File;  
  4. import java.sql.Connection;  
  5. import java.sql.DriverManager;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.ResultSet;  
  8.   
  9. import org.apache.lucene.analysis.Analyzer;  
  10. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  11. import org.apache.lucene.document.Document;  
  12. import org.apache.lucene.document.Field;  
  13. import org.apache.lucene.index.IndexWriter;  
  14. import org.apache.lucene.queryParser.QueryParser;  
  15. import org.apache.lucene.search.IndexSearcher;  
  16. import org.apache.lucene.search.Query;  
  17. import org.apache.lucene.search.ScoreDoc;  
  18. import org.apache.lucene.search.TopScoreDocCollector;  
  19. import org.apache.lucene.store.Directory;  
  20. import org.apache.lucene.store.FSDirectory;  
  21. import org.apache.lucene.util.Version;  
  22.   
  23. /** 
  24.  *  
  25.  * @描述 对数据库数据进行搜索 
  26.  */  
  27. public class LuceneUtil {  
  28.   
  29.     // 保存路径  
  30.     private static String INDEX_DIR = "D:\\Lucene\\index";  
  31.     private static Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
  32.     private static Directory directory = null;  
  33.   
  34.     /** 
  35.      * 建立索引 
  36.      * @param args 
  37.      */  
  38.     public static void index() throws Exception{  
  39.         directory = FSDirectory.open(new File(INDEX_DIR));  
  40.         File indexFile = new File(INDEX_DIR);  
  41.         if (!indexFile.exists()) {  
  42.             indexFile.mkdirs();  
  43.         }  
  44.           
  45.         //if (new File(INDEX_DIR).listFiles().length <= 0) {  
  46.             IndexWriter indexWriter = new IndexWriter(directory, analyzer,IndexWriter.MaxFieldLength.LIMITED);  
  47.   
  48.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
  49.             Connection connection = DriverManager.getConnection("jdbc:sqlserver://bbs:1433;DatabaseName=AIIM_DB;userName=sa;password=123456");  
  50.             PreparedStatement statement = connection.prepareStatement("select * from ArchivesInfoAttachedFileFullTextInfo");  
  51.             ResultSet resultSet = statement.executeQuery();  
  52.             while (resultSet.next()) {  
  53.                 Document document = new Document();  
  54.                 document.add(new Field("ID", resultSet.getString("ID"),Field.Store.YES, Field.Index.ANALYZED));  
  55.                 document.add(new Field("FullText", resultSet.getString("FullText"), Field.Store.YES, Field.Index.ANALYZED));  
  56.                 indexWriter.addDocument(document);  
  57.             }  
  58.               
  59.             indexWriter.optimize();// 优化  
  60.             indexWriter.close();  
  61.             resultSet.close();  
  62.             statement.close();  
  63.             connection.close();  
  64.         //}  
  65.     }  
  66.       
  67.     /** 
  68.      * 关键字查询 
  69.      * @param str 
  70.      * @throws Exception 
  71.      */  
  72.     public static void search(String str) throws Exception{  
  73.         directory = FSDirectory.open(new File(INDEX_DIR));  
  74.         IndexSearcher indexSearcher = new IndexSearcher(directory, true);  
  75.           
  76.         String fieldname = "FullText";  
  77.         QueryParser queryParser = new QueryParser(Version.LUCENE_30,fieldname, analyzer);  
  78.         Query query = queryParser.parse(str);  
  79.         TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.create(100true);  
  80.         indexSearcher.search(query, topScoreDocCollector);  
  81.         ScoreDoc[] scoreDocs = topScoreDocCollector.topDocs().scoreDocs;  
  82.         for (int i = 0; i < scoreDocs.length; i++) {  
  83.             Document doc = indexSearcher.doc(scoreDocs[i].doc);  
  84.             System.out.println(doc.get("ID"));  
  85.             System.out.println("------------------------------------------------");  
  86.         }  
  87.     }  
  88.       
  89.       
  90.     public static void main(String[] args) {      
  91.         try {  
  92.             //LuceneUtil.index();  
  93.             LuceneUtil.search("成绩");  
  94.         } catch (Exception e) {  
  95.             e.printStackTrace();  
  96.         }  
  97.     }  

分享到:
评论

相关推荐

    又是轮子(不过是自备): lucene3.0搜索数据库(最简单形式)

    标题中的“又是轮子(不过是自备):lucene3.0搜索数据库(最简单形式)”指的是博主在分享自己对Lucene 3.0版本的理解和应用,其中“轮子”常常是程序员用来形容重复造的工具或库,这里表示作者自行实现了一个基于...

    Lucene3.0 使 用 教 程

    查询时,需要创建查询对象,使用查询执行器在索引库中执行查询,获取搜索结果,并根据需要对结果进行排序和分页。 通过学习Lucene3.0 使用教程,开发者能够掌握全文检索的基本原理和技术,为自己的应用系统添加高效...

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

    本文将深入探讨Lucene3.0版本,结合“庖丁解牛”的精神,对其实现机制进行细致的剖析,并结合索引搜索程序的实例,帮助读者理解和应用这一强大的工具。 一、Lucene3.0概述 Lucene3.0是Apache软件基金会的一个项目...

    lucene3.0 实例

    Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发,它为 Java 开发人员提供了强大的文本搜索功能...尽管现代应用通常使用更新的 Lucene 版本,但这个实例仍然对了解搜索引擎的基本运作方式有很好的教学价值。

    lucene3.0 api jar

    1. **索引构建**:Lucene首先需要对数据源(如文件、数据库等)进行索引。`Analyzer`类负责文本的分词,`Document`对象用于存储文档信息,`Field`定义了文档字段和其属性,而`IndexWriter`则负责将这些信息写入索引...

    lucene 3.0 java示例

    这个“lucene 3.0 java示例”压缩包提供了一个具体的实例,演示如何在Java应用程序中使用Lucene 3.0版本来查询数据库。 在Lucene中,主要涉及以下几个核心概念: 1. **索引**:Lucene通过构建索引来提高搜索效率。...

    lucene3.0

    1. 创建索引:将数据源(如数据库、文件系统)中的内容读取并转换为Lucene的Document对象,然后添加到IndexWriter中进行索引。 2. 查询处理:用户输入查询后,使用Analyzer处理查询字符串,生成Query对象。 3. ...

    传智播客Lucene3.0课程

    ### 传智播客Lucene3.0课程知识点解析 #### 一、全文检索概览 **全文检索**是一种能够高效地从大量文档中找出含有指定词汇的技术。它广泛应用于各种场景,包括操作系统中的文件搜索、开发环境的帮助文档查询、在线...

    汤阳光_Lucene3.0课程

    【Lucene3.0课程】主要讲解了如何利用Lucene这一全文检索库来实现站内搜索功能,如在BBS、BLOG、电子商务网站中搜索文章或商品信息。Lucene被广泛应用,包括Eclipse、Jira等多个知名项目。全文检索是针对文本内容的...

    Lucene3.0_使__用_教_程.doc

    《Lucene3.0使用教程》旨在介绍如何利用Apache Lucene这个开源全文检索框架来实现高效、精准的文本搜索功能。Lucene是一个强大的搜索引擎库,广泛应用于站内搜索,如论坛、博客、网上商店的商品搜索等。在学习Lucene...

    lucene3.0原理与分析

    它与传统的结构化数据搜索(例如数据库查询)不同,后者通常依赖于预定义的字段和属性。全文检索的主要目标是从大量文本数据中高效地找到包含特定关键词或短语的文档。 ##### 非结构化数据及其分类 - **结构化数据...

    传智播客Lucene3.0_精品课程

    通过学习Lucene 3.0,我们可以深入了解全文检索的基本原理和技术细节,掌握如何利用Lucene为自己的系统添加全文检索功能,从而提高数据检索的效率和准确性。这对于现代网站和应用程序来说是非常有价值的技能。

    Apache Lucene3.0 入门实例介绍

    这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...

    Lucene+3.0+原理与代码分析.pdf

    - 结构化数据(如数据库)可以通过SQL查询等方式进行快速搜索。 - 对非结构化数据的搜索主要采用全文检索技术,通过构建索引来实现快速查询。 3. **全文检索的基本方法**: - **顺序扫描法(Serial Scanning)**:...

    Lucene3.0课程

    【Lucene3.0课程】主要讲解了全文检索技术,这是一种强大的工具,能够对大量文本内容进行精确查找,并且能够突出显示检索结果中的关键词。全文检索不仅限于搜索引擎,也广泛应用于各种系统内部的搜索功能,如Windows...

    Lucene_3.0_原理与代码分析

    结构化数据通常是指具有固定格式或有限长度的数据,例如数据库中的表格、元数据等;而非结构化数据则是指那些不定长或没有固定格式的数据,比如电子邮件、文档、网页内容等。全文检索主要针对的就是非结构化数据进行...

    自己刚开发完成完美运行Lucene.net+SQL server(附数据源)童叟无欺

    3.使用了较新的Lucene.net,目前是3.0版本 4.使用了最后一版盘古分词(2016年版本) 5.使用Winform+webBrowser实现(webBrowser负责显示结果) 使用方式: 1.新建数据库,然后在新建的数据库中执行附件根目录的sql...

Global site tag (gtag.js) - Google Analytics