`
louisnan
  • 浏览: 27006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene连接数据库的简单应用

阅读更多
Lucene作为当前较为强大的java全文搜索引擎,应用主要分为两步:
一、建立索引
package builder;

import org.apache.lucene.analysis.standard.StandardAnalyzer;   
import org.apache.lucene.document.Document;   
import org.apache.lucene.document.Field;   
import org.apache.lucene.index.IndexReader;   
import org.apache.lucene.index.IndexWriter;   
import org.apache.lucene.queryParser.QueryParser;   
import org.apache.lucene.search.Query;   
import org.apache.lucene.search.Hits;   
import org.apache.lucene.search.IndexSearcher;   
import org.apache.lucene.store.Directory;   
import org.apache.lucene.store.FSDirectory;   
import java.sql.Connection;   
import java.sql.Statement;   
import java.sql.ResultSet;   
import java.sql.DriverManager;   
  
public class Builder {   
    public static ResultSet rs = null;   
    public static Statement statement = null;   
    public static Connection con = null;   
    public Builder() throws Exception{   
           
    }   
    /**  
     * @param args  
     */  
    public static void main(String[] args) throws Exception{   
           
        /** 建索 */  
        IndexWriter indexWriter = new IndexWriter("c:/index", new StandardAnalyzer(),false);//???false时为追加索引
        indexWriter.setMaxFieldLength(250000);//???设置建立索引的长度,就是对数据的前多少条建立索引 
		indexWriter.setMaxBufferedDocs(100);//控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度
		indexWriter.setMaxMergeDocs(100);// 控制一个segment中可以保存的最大document数目,值较小有利于追加索引的速度
		indexWriter.setMergeFactor(100);// 控制多个segment合并的频率,值较大时建立索引速度较快,默认是10
           
        System.out.println("开始取数据");   
        Class.forName("com.mysql.jdbc.Driver");   
        System.out.println("已装载驱动");   
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testlucene?user=root&password=admin&useUnicode=true&characterEncoding=gbk");   
        System.out.println("已连接上数据库");   
        statement = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);   
        rs = statement.executeQuery("select id,title,content from article");   
        System.out.println("已读取数据集");   
        String id,title,content;   
        int j=0;   
        while(rs.next()){   
            Document doc = new Document();   
            id = rs.getString(1);   
            title =rs.getString(2);   
            content = rs.getString(3);   
            if(id == null)   
                id = "";   
            if(title == null)   
                title = "";   
            if(content == null )   
                content = "";   
            doc.add(new Field("id",id,Field.Store.YES,Field.Index.UN_TOKENIZED));   
            doc.add(new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.YES));   
            doc.add(new Field("content",content,Field.Store.NO,Field.Index.TOKENIZED,Field.TermVector.YES));   
            //doc.add(new Field("date",date,Field.Store.COMPRESS,Field.Index.TOKENIZED));   
            indexWriter.addDocument(doc);   
               
            System.out.println("已添加"+(++j)+"doc,其ID为:"+id);   
        }   
        indexWriter.optimize();   
        rs.close();   
        statement.close();   
        con.close();   
        System.out.println("结束取数据");   
        indexWriter.close();   
        System.out.println("已生成所有数据索引");   
           
    }   
       
    public static void getCon() throws Exception{   
           
    }   
    public static void getStatement() throws Exception{   
           
    }   
}  


二、搜索
package search;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
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.Directory;
import org.apache.lucene.store.FSDirectory;

public class Search {
	private static String indexPath = "c:/index";
	public static void main(String[] args)throws Exception{
		Directory directory = FSDirectory.getDirectory(indexPath, false);//???boolean值为false时可以进行查询
		 /** 搜索 */   
	    IndexReader reader = IndexReader.open(directory);   
	    IndexSearcher indexSearcher = new IndexSearcher(reader);   
	    System.out.println("建立搜索引擎");   
	    QueryParser parser = new QueryParser("content",new StandardAnalyzer());   
	    System.out.println("建立搜索域和分析器");   
	    Query query = parser.parse("好孩子");   
	    System.out.println("提供搜索内容");   
	    Hits hits = indexSearcher.search(query);   
	    System.out.println("进行搜索并返回数据集");   
	    for(int i=0;i<hits.length();i++){   
	        Document doc = hits.doc(i);   
	        
	            System.out.println(doc.get("title"));   
	    }   
	    System.out.println("取得查询数据标题");   
	    directory.close();   
	    indexSearcher.close();   
	    System.out.println("关闭搜索器");   
	}
}

分享到:
评论

相关推荐

    lucene与数据库连接进行查询

    首先,我们需要了解如何使用 JDBC 连接数据库。JDBC 是 Java 中的标准 API,允许程序与各种数据库进行交互。使用 JDBC,你需要加载对应的数据库驱动,然后通过 `DriverManager.getConnection()` 方法创建数据库连接...

    用lucene对数据库建立索引及搜索

    使用Lucene.NET对数据库进行索引和搜索,可以极大地提高应用程序的搜索性能,尤其是对于大数据量和复杂查询需求。通过将数据库中的文本数据转换为索引,用户可以快速地找到相关记录,提升用户体验。然而,实际应用时...

    用Lucene检索数据库.doc

    1.建立数据库连接 2.新建一个方法getResutl(String),它返回的是数据库表Authors的内容。 3.定义一个IndexWriter,它是将索引写进Lucene自己的数据库中。 4.定义一个Document,Document相当于二维表中一行数据一样。...

    用Lucene检索数据库

    - 连接数据库,获取Authors表的数据。 - 对每个结果集行创建一个`Document`,添加相应的`Field`。 - 初始化`IndexWriter`,设置索引存储位置和分析器。 - 将`Document`添加到`IndexWriter`,建立索引。 - 最后...

    Lucene与数据库结合示例(加双关键字高亮)

    2. **数据库集成**:学习如何将MySQL中的数据导入到Lucene的索引中,可能涉及JDBC连接、SQL查询等知识。 3. **索引创建**:了解如何使用Lucene的Analyzer对数据进行分词,创建索引,包括字段设置、分析器选择等。 ...

    Lucene检索数据库支持中文检索.doc

    工具类如PropertiesUtil用于读取这些配置信息,以便程序在运行时能正确地连接数据库和处理索引文件。 总的来说,Lucene通过高效的索引和搜索机制,实现了对数据库中文数据的全文检索。开发者可以通过配置文件管理...

    Lucene操作数据库[归纳].pdf

    要使用Lucene对数据库进行索引,首先需要创建一个Java类,如`TestLucene.java`,负责数据库连接和索引构建。建立索引的过程主要包括以下步骤: - **获取数据库数据**:通过`getResult(String sql)`方法执行SQL...

    Lucene检索数据库支持中文检索

    ### Lucene检索数据库支持中文检索 #### 一、Lucene简介与原理 ##### 1. Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成。其核心功能是为开发者提供构建搜索应用程序的基础框架。Lucene...

    Lucene操作数据库借鉴.pdf

    - 使用JDBC创建数据库连接并执行SQL查询,获取Authors表中的所有记录。 - 针对每条用户记录,创建一个Lucene `Document`对象,它代表一条索引记录。 - 将数据库记录的字段映射到`Document`的`Field`对象中,如`...

    lucene检索数据库

    1. **数据库连接**:使用JDBC建立与数据库的连接,获取数据库中Authors表的数据。这部分代码通常涉及数据库URL、用户名和密码,这里为了简化,省略了具体实现。 2. **获取数据库结果集**:创建一个名为`getResult...

    使用lucene全文检索数据库

    **使用Lucene全文检索数据库** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的全文检索功能。在这个项目中,我们将探讨如何利用Lucene ...

    用Lucene.net对数据库建立索引及搜索

    在提供的代码示例中,首先通过`OpenTable`方法连接到SQL Server数据库,执行SQL查询语句获取数据。查询的表名为`userblog`,包含了`id`、`title`和`content`三列。然后,使用`CreateIndex`方法创建索引。 在`...

    lucene与sqlserver数据库实现索引的简单实例

    这通常通过JDBC(Java Database Connectivity)驱动实现,编写Java代码连接数据库并执行查询,获取所需字段。 2. **预处理**:数据抽取后,对文本进行预处理,包括去除标点符号、数字、停用词等,然后进行分词。...

    Lucene数据库操作实例.doc

    这涉及到建立数据库连接、执行 SQL 查询并将结果存储在 ResultSet 对象中。 - 针对每条用户记录,创建一个 Lucene `Document` 对象。`Document` 类是用来存储索引数据的容器,它由多个 `Field` 组成,每个 `Field` ...

    Lucene.NET结合Sql建立全文检索Demo源码

    通过深入研究这个Demo源码,初学者可以了解到如何在实际项目中应用Lucene.NET,以及如何与SQL数据库协作,实现高效全文检索。同时,这也是一个学习.NET开发和理解全文搜索引擎工作原理的好起点。

Global site tag (gtag.js) - Google Analytics