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

📄 contextlistener.java

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.*;
import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.QueryParser;
import com.ht.gis.service.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;

public class ContextListener extends HttpServlet implements ServletContextListener, ServletContextAttributeListener {
  private static Log log = LogFactory.getLog("WebGIS");

  private ResultSet rs = null;
  private DataSource ds = null;
  private Statement stmt = null;
  private Connection conn = null;

  public void contextInitialized(ServletContextEvent sce){
  try{
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    ds = (DataSource) envCtx.lookup("jdbc/myoracle");
    conn = ds.getConnection();
    stmt = conn.createStatement();
    rs = stmt.executeQuery("select id,name from cas_cn_nplap");

    Analyzer luceneAnalyzer = new StandardAnalyzer();
    Directory indexDir = new RAMDirectory("D:\\luceneIndex");
    IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
    long startTime = new java.util.Date().getTime();int i = 0;
    while (rs.next()) {
      Document document = new Document();
      document.add(Field.Text("id", String.valueOf(rs.getLong("id"))));
      document.add(Field.Text("contents", rs.getString("name")));
      indexWriter.addDocument(document);i++;
    }
    indexWriter.optimize();
    indexWriter.close();
    long endTime = new java.util.Date().getTime();
    log.debug("建立索引时间: " + (endTime - startTime) + " 毫秒");
    log.debug("读取数据库记录数: " + i);
    rs.close();
    stmt.close();
    conn.close();
    //TxtSearcher.main(new String[2]);
    }catch(Exception e){e.printStackTrace();}
  }

  public void search()throws Exception{
    String queryStr = "福田";
    File indexDir = new File("D:\\luceneIndex");
    FSDirectory directory = FSDirectory.getDirectory(indexDir, false);
    IndexSearcher searcher = new IndexSearcher(directory);
    if (!indexDir.exists()) {
      log.debug("The Lucene index is not exist");
      return;
    }
    Analyzer analyzer = new StandardAnalyzer();
    QueryParser parser = new QueryParser("contents" , analyzer);
    long startTime = new java.util.Date().getTime();
    Query query = parser.parse(queryStr);
    //Term term = new Term("contents", queryStr.toLowerCase());
    //TermQuery query = new TermQuery(term);
    Hits hits = searcher.search(query);
    for (int i = 0; i < hits.length(); i++) {
      Document document = hits.doc(i);
      log.debug("File: " + document.get("id"));
    }
    long endTime = new java.util.Date().getTime();
    log.debug("搜索时间: " + (endTime - startTime)+" 毫秒");

  }
  public void contextDestroyed(ServletContextEvent sce) {
  }
  public void attributeAdded(ServletContextAttributeEvent scab) {
  }
  public void attributeRemoved(ServletContextAttributeEvent scab) {
  }
  public void attributeReplaced(ServletContextAttributeEvent scab) {
  }
}

⌨️ 快捷键说明

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