⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indexer.java~175~

📁 全文搜索源码,基于开源项目Lucene编写,开发语言为JAVA,本程序做为LUCENE的示例DEMO
💻 JAVA~175~
字号:
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;
  private String aaa;

  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 + -