因为工作中突然要用到lucene,就到官网上下了lucene4.7的jar包和文档,回头开始学习的时候才发现,网上lucene相关的资料大部分都停留在3.*阶段,于是结合前辈的代码,自己写了下面一个例子,该例子可以实现对mysql数据库中单个表的索引和多字段同时搜索以及按各个字段设定的权重对结果排序,我在最初排序的结果出来时很不理解,经过一天的研究,终于略知其所以然,下面贴例子程序和分析。
数据库连接的工具类
package com.ztlc.lucene;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* JdbcUtil.java
* @version 1.0
* @createTime JDBC获取Connection工具类
*/
public class JdbcUtil {
private static Connection conn = null;
//设置数据库连接地址
private static final String URL = "jdbc:mysql://127.0.0.1/shopping?autoReconnect=true&characterEncoding=utf8";
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//设置你的数据库用户名
private static final String USER_NAME = "root";
//设置你的数据库密码
private static final String PASSWORD = "123456";
public static Connection getConnection() {
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
创建索引和搜索的方法
package com.ztlc.lucene;
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.document.IntField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.Multi