php通过调用lucene库实现检索应用。注意为下面安装的php,tomcat,java,apache添加path路径。
被检索的数据存放在mysql数据库中,检索的数据是使用python从网络上爬取的,已存储为json格式,直接可以java读取插入数据库。
用到的jar包。
1、gson-2.2.1.jar(用户直接将json格式转化为java对象)
2、lucene-core-3.0.2.jar(lucene库)
3、mysql-connector-java-5.1.37-bin.jar (java连接mysql驱动库)
4、LuceneExample.jar(自己编写的使用Lucene的示例库)
第一步:
安装Java,配置好环境变量。将上面的jar包拷贝到java虚拟机运行环境jre\lib\ext目录下,这样在虚拟机运行时就会自动加载这些库了。
第二步:
安装tomcat,由于php调用java需要用到php-java-bridge,而下载下来的是JavaBridge.war,所以需要用tomcat来将下载的JavaBridge.war文件解析一下,具体方法为:将JavaBridge.war放在tomcat的webapps\目录,启动tomcat,此时tomcat会自动解析在webapps\下的JavaBridge.war,生产JavaBridge文件夹,将这个文件夹拷贝到第二步的apache运行目录。
第三步:
安装php,安装apache,将第一步中得到的JavaBridge文件夹拷贝到htdocs\目录。(JavaBridge文件夹里包含一些类似头文件的东西)
第四步:
环境已经基本建立好了,下面开始具体实施。
1、登录到mysql终端,利用SQL指令建立tiku数据库,建立math数据库表。
create database tiku;
use tiku;
create table math(index_num int(11) primary key not null auto_increment,question text not null,answer text);
建完表后可以 desc math; 查看一下。
2、终端中进入加载数据代码的目录D:\soft\yangyang\luc,数据文件为out.data,为json格式。
编译LoadData.java并执行,
javac LoadData.java
java LoadData
此时在终端中查看math数据库,即可看到数据已存入数据库表math中。
select * from math limit 2;
3、编译生产自己编写的使用Lucene的示例库
同样在上述目录中执行下面命令
javac LuceneExample.java 编译生成class文件
jar -cvf LuceneExample.jar LuceneExample.class 打包class文件
接着将LuceneExample.jar文件拷贝至上面说的jre\lib\ext目录下。
4、编写服务文件
进入apache运行目录htdocs\编写test.php文件来调用上面的LuceneExample.jar库实现检索。具体代码见附录
第五步:
开启服务环境,查看运行结果:
1、首先保证开启mysql服务,可以在cmd中运行命令 net start mysql
2、进入第三步的JavaBridge\WEB-INF\lib目录下,双击运行JavaBridge.jar程序(如果不运行,手动进入该目录开启java -jar JavaBridge.jar,选择8080端口,确定)
3、进入apache的bin目录下双击ApacheMonitor.exe开启apache服务。
4、此时在浏览器中输入http:\localhost\test.php即可看到查询结果(若为乱码,请修改编码方式为UTF-8)。
LoadData.java源码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import com.google.gson.Gson;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
public class LoadData {
public static void loadJson(String fileName){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "utf-8"));
String data = br.readLine();
Gson gson = new Gson();
/*
List<TiMu> tt = new ArrayList<TiMu>();
tt.add(new TiMu("fff", "fsdfsd"));
tt.add(new TiMu("444", "3333232"));
System.out.println(gson.toJson(tt));
*/
Type type = new TypeToken<List<TiMu>>(){}.getType();
List<TiMu> ps = gson.fromJson(data, type);
System.out.println(ps.toString());
//JDBC Section
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tiku", "root", "buptmm");
String sql="insert into math(question,answer) values(?,?)";
PreparedStatement preStmt =conn.prepareStatement(sql);
for(TiMu ti:ps){
preStmt.setString(1,ti.getQ());
preStmt.setString(2,ti.getA());
preStmt.executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
}