📄 indexer.java~174~
字号:
package com.ht.gis.search;
import java.io.*;
import javax.sql.*;
import java.sql.*;
import java.util.*;
import javax.naming.*;
import javax.servlet.ServletContext;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
//从数据库建立全文索引,保存到文件系统
public class Indexer {
private DataSource ds = null;
private ServletContext servContext = null;
public Indexer(ServletContext servContext)throws Exception{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/myoracle");
this.servContext = servContext;
}
public String setIndex()throws Exception {
//File indexDir = new File("D:\\luceneIndex");
//Analyzer luceneAnalyzer = new StandardAnalyzer();
//IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
File indexDir = new File("D:\\luceneIndex");
File dataDir = new File("D:\\luceneData");
Analyzer luceneAnalyzer = new StandardAnalyzer();
File[] dataFiles = dataDir.listFiles();
IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
//======== 操作图层索引表的所有图层 ===========
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select MAP,ENAME from Layer");
while(rs.next()){
String tableName = rs.getString("ENAME");
int mapID = rs.getInt("MAP");
HashMap fatherMap = getFatherMap(mapID);
indexLayer(indexWriter,tableName,fatherMap);
}
indexWriter.optimize();
indexWriter.close();
rs.close();stmt.close();conn.close();
//=========== 组织返回XML ==============
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document XmlDoc = db.newDocument();
Node root = XmlDoc.appendChild(XmlDoc.createElement("Htinfo"));
Node head = root.appendChild(XmlDoc.createElement("head"));
Node body = root.appendChild(XmlDoc.createElement("body"));
Node type = head.appendChild(XmlDoc.createElement("type"));
((org.w3c.dom.Element)root).setAttribute("version", "1.0");
type.appendChild(XmlDoc.createTextNode("索引响应"));
body.appendChild(XmlDoc.createTextNode("索引成功"));
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
StringWriter sw = new StringWriter();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(new DOMSource(XmlDoc), new StreamResult(sw));
String XMLString = sw.toString();
return XMLString;
}
//============ 取得所有父级编码 ==========================
public HashMap getFatherMap(int mapID)throws Exception{
HashMap fatherMap = new HashMap();
int preID = 0;
do{
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select CODE,PRELEVEL,TYPE from map where id = " + mapID);
preID = rs.getInt("PRELEVEL");
int type = rs.getInt("TYPE");
String code = rs.getString("CODE");
fatherMap.put(String.valueOf(type),code);
rs.close();stmt.close();conn.close();
mapID = preID;
}while(preID != 0);//世界地图的preID为0
return fatherMap;
}
//================= 遂个图层建立索引 ===========================
public void indexLayer(IndexWriter indexWriter,String tableName,HashMap fields)throws Exception{
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select id,name,addr,photo from " + tableName);
while (rs.next()) {
Document document = new Document();
document.add(Field.Text("id", String.valueOf(rs.getLong("id"))));
document.add(Field.Text("name", rs.getString("name")));
document.add(Field.Text("addr", rs.getString("addr")));
document.add(Field.Text("photo", rs.getString("photo")));
//============ 写入地图四个级别字段的代码 =================
document.add(Field.Text("1", (String)fields.get("1")));
document.add(Field.Text("2", (String)fields.get("2")));
document.add(Field.Text("3", (String)fields.get("3")));
document.add(Field.Text("4", (String)fields.get("4")));
indexWriter.addDocument(document);
}
rs.close();
stmt.close();
conn.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -