lucene的创建
来源:互联网 发布:大数据公司有哪些 编辑:程序博客网 时间:2024/05/20 06:56
创建Lucene首先需要的是lucene-core-3.0.3.jar,然后创建一个Servlet调用lucene
package com.geostar.util.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.SimpleFSDirectory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
import com.geostar.model.busds.BUSDataSource;
import com.geostar.query.Constants;
import com.geostar.query.util.XMLUtil;
public class BUSGoogleServlet extends HttpServlet {
private static final long serialVersionUID=1L;
private Logger logger=Logger.getLogger(BUSGoogleServlet.class);
private BUSDataSource busDs;
//String fieldName = "STANDARDNA";
File file = new File(Constants.BUS_LUCENE_INDEX_FILE_PATH);
//String tblname = "t0553l8100s0010k00031040";
int QUERYNUM = 10;
@Override
public void init(ServletConfig config){
try{
ApplicationContext cn=WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
busDs=(BUSDataSource)cn.getBean("busDs");
if(logger.isDebugEnabled()){
logger.info("get injected pojo datasource using spring ....");
};
}catch(Exception exception){
exception.printStackTrace();
logger.error(exception.getMessage());
};
};
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//double dt1 = new Date().getTime();
// TODO Auto-generated method stub
response.setContentType("text/xml;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String keyword =request.getParameter("key"); //new String(request.getParameter("key").getBytes("iso8859-1"),"UTF-8");
if(logger.isDebugEnabled()){
logger.info("enter google servlet service method and get params named key :"+keyword);
};
if(keyword==null||keyword.length()==0){
String err=XMLUtil.generateException("请输入key的参数与参数值!");
out.print(err);
return;
};
Analyzer analyzer = new IKAnalyzer();
Directory directory = null;
IndexWriter iwriter = null;
IndexSearcher isearcher = null;
try {
if (!file.exists()) {
try {
Class.forName(busDs.getDriverClassName());
if(logger.isDebugEnabled()){
logger.info("load jdbc driver class :"+busDs.getDriverClassName());
};
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
logger.error(e.getMessage());
}
Connection conn = DriverManager.getConnection(
busDs.getUrl(),
busDs.getUserName(),
busDs.getPassWord());
//ResultSet rs = conn.createStatement().executeQuery("select * from POI_POINT");
ResultSet rs = conn.createStatement().executeQuery(
"select * from " + busDs.getTableName());
// 建立内存索引对象
directory = new SimpleFSDirectory(file);
iwriter = new IndexWriter(directory, analyzer, true,
IndexWriter.MaxFieldLength.LIMITED);
//System.out.println("IndexWriter----------"+(new Date().getTime() - dt1) / 1000);
while (rs.next()) {
Document doc = new Document();
doc.add(new Field(busDs.getFieldName(), rs.getString(busDs.getFieldName()),
Field.Store.YES, Field.Index.ANALYZED));
iwriter.addDocument(doc);
logger.info("index field:"+busDs.getFieldName()+" and its value:"+rs.getString(busDs.getFieldName()));
}
//System.out.println("iwriter.close-------------"+(new Date().getTime() - dt1) / 1000);
iwriter.close();
rs.close();
conn.close();
logger.info("index successfully.... ");
} else {
//System.out.println("SimpleFSDirectory1-------------"+(new Date().getTime() - dt1) / 1000);
directory = new SimpleFSDirectory(file);
logger.info("index from local file and its path is :"+file.getPath());
//System.out.println("SimpleFSDirectory2-------------"+(new Date().getTime() - dt1) / 1000);
}
//System.out.println((new Date().getTime()-dt1)/1000);
isearcher = new IndexSearcher(directory);
isearcher.setSimilarity(new IKSimilarity());
Query query = IKQueryParser.parse(busDs.getFieldName(), keyword);
//System.out.println(query.toString());
TopDocs topDocs = isearcher.search(query, QUERYNUM);
//System.out.println("命中:" + topDocs.totalHits);
StringBuilder xml = new StringBuilder();
xml.append("<?xml version=/"1.0/" encoding=/"utf-8/"?>");
xml.append("<results>");
// 输出结果
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < (topDocs.totalHits > QUERYNUM ? QUERYNUM : topDocs.totalHits); i++) {
Document targetDoc = isearcher.doc(scoreDocs[i].doc);
String fielddata = targetDoc.getFields(busDs.getFieldName())[0].stringValue();
xml.append("<result key=/"" + fielddata
+ "/"></result>");
//System.out.println("内容:" + fielddata);
}
xml.append("</results>");
out.print(xml);
logger.info("response xml: "+xml.toString());
//System.out.println(xml.toString());
//System.out.println((new Date().getTime() - dt1) / 1000);
} catch (CorruptIndexException e) {
//e.printStackTrace();
logger.info(e.getMessage());
} catch (LockObtainFailedException e) {
//e.printStackTrace();
logger.info(e.getMessage());
} catch (IOException e) {
//e.printStackTrace();
logger.info(e.getMessage());
} catch (SQLException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
logger.info(e.getMessage());
} finally {
if (isearcher != null) {
try {
isearcher.close();
logger.info("index searcher closed ...");
} catch (IOException e) {
//e.printStackTrace();
logger.info(e.getMessage());
}
}
if (directory != null) {
try {
directory.close();
logger.info("index directory closed ...");
} catch (IOException e) {
//e.printStackTrace();
logger.info(e.getMessage());
}
}
}
//System.out.println((new Date().getTime()-dt1)/1000);
out.flush();
out.close();
}
}
前台可以通过以下方法调用
if(!window.AutoBusComplete) window.AutoBusComplete = {};
AutoBusComplete.buscompleteline = 0;
AutoBusComplete.busdel = function(){
try{
if($("#busDiv")){
$("#busDiv").remove();
buscompleteline = 0;
}
}catch(e){
return;
}
}
$(document).ready(function(){
//文本框失去焦点时层消失
$(document.body).click(function(){
AutoBusComplete.busdel();
});
});
//用于调用Lucene的监控方法
AutoBusComplete.busStartSuggetsres = function(){
try{
AutoBusComplete.busdel();
var top = $("#startStation").offset().top;
var left = $("#startStation").offset().left;
var newDiv = $("<div/>").width($("#startStation").width() + 6)
.css("position", "absolute")
.css("backgroundColor", "white")
.css("left", left)
.css("top", top + $("#startStation").height() + 6)
.css("border", "1px solid #CCCCCC")
.css("z-index", "1000")
.attr("id", "busDiv");
var table = $("<table width='100%' style='color:#585656;'/>")
.attr("cellpadding", "0")
.attr("cellspacing", "0").attr("id", "busTable");;
if($.trim($("#startStation").val()).length>0){
$.post(DC.Cfg.siteUrl + "servlet/BUSGoogleServlet", {key: $("#startStation").val()}, function(xml){
$(xml).find("results result").each(function(){
var key = $(this).attr("key");
var count = $(this).attr("count");
var tr = $("<tr/>").css("cursor", "pointer").css("height", "20px").mouseout(function(){
$(this).css("backgroundColor", "white").css("color", "#585656").css("font-weight", "normal");
}).mouseover(function(){
$(this).css("backgroundColor", "#F0F0FF").css("color", "#585656").css("font-weight", "bold");
}).click(function(){
$("#startStation").val($(this).find("td").eq(0).html());
AutoBusComplete.busdel();
})
var td1 = $("<td/>").html(key).css("fontSize", "14px")
.css("margin", "5 5 5 5");
tr.append(td1)//.append(td2);
table.append(tr);
newDiv.append(table);
});
});
}
$(document.body).append(newDiv);
if($("#startStation").val() == ""){
$("#busDiv").remove();
}
}catch(e){
return;
}
}
//用于调用Lucene的监控方法
AutoBusComplete.busEndSuggetsres = function(){
try{
AutoBusComplete.busdel();
var top = $("#endStation").offset().top;
var left = $("#endStation").offset().left;
var newDiv = $("<div/>").width($("#endStation").width() + 6)
.css("position", "absolute")
.css("backgroundColor", "white")
.css("left", left)
.css("top", top + $("#endStation").height() + 6)
.css("border", "1px solid #CCCCCC")
.css("z-index", "1000")
.attr("id", "busDiv");
var table = $("<table width='100%' style='color:#585656;'/>")
.attr("cellpadding", "0")
.attr("cellspacing", "0").attr("id", "busTable");;
if($.trim($("#endStation").val()).length>0){
$.post(DC.Cfg.siteUrl + "servlet/BUSGoogleServlet", {key: $("#endStation").val()}, function(xml){
$(xml).find("results result").each(function(){
var key = $(this).attr("key");
var count = $(this).attr("count");
var tr = $("<tr/>").css("cursor", "pointer").css("height", "20px").mouseout(function(){
$(this).css("backgroundColor", "white").css("color", "#585656").css("font-weight", "normal");
}).mouseover(function(){
$(this).css("backgroundColor", "#F0F0FF").css("color", "#585656").css("font-weight", "bold");
}).click(function(){
$("#endStation").val($(this).find("td").eq(0).html());
AutoBusComplete.busdel();
})
var td1 = $("<td/>").html(key).css("fontSize", "14px")
.css("margin", "5 5 5 5");
tr.append(td1)//.append(td2);
table.append(tr);
newDiv.append(table);
});
});
}
$(document.body).append(newDiv);
if($("#endStation").val() == ""){
$("#busDiv").remove();
}
}catch(e){
return;
}
}
//对当前startStation元素进行事件绑定
$("#startStation").bind("propertychange", AutoBusComplete.busStartSuggetsres);
//对当前endStation元素进行事件绑定
$("#endStation").bind("propertychange", AutoBusComplete.busEndSuggetsres);
//解决火狐上的监控问题
if (window.addEventListener){
document.getElementById("startStation").addEventListener("input", AutoBusComplete.busStartSuggetsres, false);
document.getElementById("endStation").addEventListener("input", AutoBusComplete.busEndSuggetsres, false);
}
- lucene的创建
- lucene--索引的创建
- Lucene创建索引的过程
- Lucene的创建和查询
- lucene学习之创建索引的方式
- 基于lucene的案例开发:创建索引
- Lucene搜索已经创建好的索引
- Lucene 学习笔记(3) :Hello Lucene(Lucene Index的创建和查找)
- lucene索引_创建_域选项和lucene索引_的删除、更新.
- lucene的开发环境配置,并实现lucene功能一:创建索引;及代码示例
- 【Lucene】使用反射技术优化Lucene索引库的查询与创建
- lucene学习----创建索引
- lucene创建索引
- Java_ABC_3.Lucene创建索引
- Lucene 索引创建
- LUCENE创建索引【鸡蛋】
- Lucene 索引创建
- lucene--创建索引,搜索
- Java的动态编译
- final、finally和finalize的区别
- CTypefaceStore -14问题
- 浅谈MVC模式
- 应用51地图API
- lucene的创建
- java环境的配置
- C#在dataGridView中遍历
- 合理使用mysql索引
- 在使用lucene时碰见的问题
- scanf的用法
- Blogilo连接比特网博客
- 跪求大侠,各位高手帮帮忙啊!!
- C++ primer 第一章学习笔记