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

📄 searcher.java~72~

📁 全文搜索源码,基于开源项目Lucene编写,开发语言为JAVA,本程序做为LUCENE的示例DEMO
💻 JAVA~72~
字号:
package com.ht.gis.search;

import java.io.*;
import java.util.Date;
import javax.servlet.ServletContext;
import org.apache.lucene.search.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import com.ht.gis.service.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class Searcher {
  private static Log log = LogFactory.getLog("WebGIS");
  private IndexSearcher searcher = null;
  private ServletContext servContext = null;
  private String OutMapDir = null;

  public Searcher(ServletContext servContext)throws Exception {
    this.servContext = servContext;
    OutMapDir = servContext.getRealPath("luceneIndex");
    File indexDir = new File(OutMapDir);
    if (!indexDir.exists()) {
      log.error("索引输出目录: " + OutMapDir + "不存在!");
      return;
    }
    reset();
  }
  public void reset()throws Exception{
    try{
      FSDirectory directory = FSDirectory.getDirectory(OutMapDir, false);
      searcher = new IndexSearcher(directory);
    }catch(FileNotFoundException e){log.error("没有建立索引,启动后请进行初始化索引操作!");}
  }
//================= 全文搜索操作,返回XML字符串==================
  public String search(String queryStr, String levelName, String levelCode)throws Exception{
    try{
      Analyzer analyzer = new StandardAnalyzer();
      QueryParser parser = new QueryParser("name" , analyzer);
      Query query = parser.parse(queryStr);
      //=========== 组织返回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("搜索结果"));

      Hits hits = searcher.search(query);
      for (int i = 0; i < hits.length(); i++) {
        Document luceneDoc = hits.doc(i);
        Node row = body.appendChild(XmlDoc.createElement("row"));
        Node id = row.appendChild(XmlDoc.createElement("id"));
        Node name = row.appendChild(XmlDoc.createElement("name"));
        Node addr = row.appendChild(XmlDoc.createElement("addr"));
        Node photo = row.appendChild(XmlDoc.createElement("photo"));
        id.appendChild(XmlDoc.createTextNode(luceneDoc.get("id")));
        name.appendChild(XmlDoc.createTextNode(luceneDoc.get("name")));
        addr.appendChild(XmlDoc.createTextNode(luceneDoc.get("addr")));
        photo.appendChild(XmlDoc.createTextNode(luceneDoc.get("photo")));
      }
      Node row = body.appendChild(XmlDoc.createElement("row"));
      Node id = row.appendChild(XmlDoc.createElement("id"));
      Node name = row.appendChild(XmlDoc.createElement("name"));
      Node addr = row.appendChild(XmlDoc.createElement("addr"));
      Node photo = row.appendChild(XmlDoc.createElement("photo"));
      id.appendChild(XmlDoc.createTextNode("111111111"));
      name.appendChild(XmlDoc.createTextNode("aaaaaaaaaaaa"));
      addr.appendChild(XmlDoc.createTextNode("addr"));
      photo.appendChild(XmlDoc.createTextNode("photo"));

      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;
    }catch(Exception e){log.error(e);}
    return null;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -