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("关闭搜索器");
}
}
分享到:
相关推荐
首先,我们需要了解如何使用 JDBC 连接数据库。JDBC 是 Java 中的标准 API,允许程序与各种数据库进行交互。使用 JDBC,你需要加载对应的数据库驱动,然后通过 `DriverManager.getConnection()` 方法创建数据库连接...
使用Lucene.NET对数据库进行索引和搜索,可以极大地提高应用程序的搜索性能,尤其是对于大数据量和复杂查询需求。通过将数据库中的文本数据转换为索引,用户可以快速地找到相关记录,提升用户体验。然而,实际应用时...
1.建立数据库连接 2.新建一个方法getResutl(String),它返回的是数据库表Authors的内容。 3.定义一个IndexWriter,它是将索引写进Lucene自己的数据库中。 4.定义一个Document,Document相当于二维表中一行数据一样。...
- 连接数据库,获取Authors表的数据。 - 对每个结果集行创建一个`Document`,添加相应的`Field`。 - 初始化`IndexWriter`,设置索引存储位置和分析器。 - 将`Document`添加到`IndexWriter`,建立索引。 - 最后...
2. **数据库集成**:学习如何将MySQL中的数据导入到Lucene的索引中,可能涉及JDBC连接、SQL查询等知识。 3. **索引创建**:了解如何使用Lucene的Analyzer对数据进行分词,创建索引,包括字段设置、分析器选择等。 ...
工具类如PropertiesUtil用于读取这些配置信息,以便程序在运行时能正确地连接数据库和处理索引文件。 总的来说,Lucene通过高效的索引和搜索机制,实现了对数据库中文数据的全文检索。开发者可以通过配置文件管理...
要使用Lucene对数据库进行索引,首先需要创建一个Java类,如`TestLucene.java`,负责数据库连接和索引构建。建立索引的过程主要包括以下步骤: - **获取数据库数据**:通过`getResult(String sql)`方法执行SQL...
### Lucene检索数据库支持中文检索 #### 一、Lucene简介与原理 ##### 1. Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成。其核心功能是为开发者提供构建搜索应用程序的基础框架。Lucene...
- 使用JDBC创建数据库连接并执行SQL查询,获取Authors表中的所有记录。 - 针对每条用户记录,创建一个Lucene `Document`对象,它代表一条索引记录。 - 将数据库记录的字段映射到`Document`的`Field`对象中,如`...
1. **数据库连接**:使用JDBC建立与数据库的连接,获取数据库中Authors表的数据。这部分代码通常涉及数据库URL、用户名和密码,这里为了简化,省略了具体实现。 2. **获取数据库结果集**:创建一个名为`getResult...
**使用Lucene全文检索数据库** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的全文检索功能。在这个项目中,我们将探讨如何利用Lucene ...
在提供的代码示例中,首先通过`OpenTable`方法连接到SQL Server数据库,执行SQL查询语句获取数据。查询的表名为`userblog`,包含了`id`、`title`和`content`三列。然后,使用`CreateIndex`方法创建索引。 在`...
这通常通过JDBC(Java Database Connectivity)驱动实现,编写Java代码连接数据库并执行查询,获取所需字段。 2. **预处理**:数据抽取后,对文本进行预处理,包括去除标点符号、数字、停用词等,然后进行分词。...
这涉及到建立数据库连接、执行 SQL 查询并将结果存储在 ResultSet 对象中。 - 针对每条用户记录,创建一个 Lucene `Document` 对象。`Document` 类是用来存储索引数据的容器,它由多个 `Field` 组成,每个 `Field` ...
通过深入研究这个Demo源码,初学者可以了解到如何在实际项目中应用Lucene.NET,以及如何与SQL数据库协作,实现高效全文检索。同时,这也是一个学习.NET开发和理解全文搜索引擎工作原理的好起点。