Lucene与DB结合示例

本文介绍了一个基于Lucene、Spring、Struts1和Mysql5的简易全文检索实现,包括数据库交互、分词、高亮显示等功能。通过创建索引、搜索数据并进行高亮显示,实现了对文章标题和内容的高效检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天发一个简单的和数据库交互的Lucene示例,只是初步的靠Lucene自带的分词实现中文分词,效果肯定没有网上琳琅的分词器相媲美,只为了示例,用了自带的高亮。页面不好看,将就一下哦。

    主要是由 Spring + Struts1 + Mysql 5 实现, 只是为了实现功能。请各位大侠拍砖。

    好了,不多说了。贴代码:

 

    1. T_ARTICLE 表

Java代码   收藏代码
  1. DROP TABLE IF EXISTS `t_article`;  
  2. CREATE TABLE `t_article` (  
  3.   `ID` varchar(32) NOT NULL default '',  
  4.   `ARTICLE_TITLE` varchar(255default NULL,  
  5.   `ARTICLE_TAG` varchar(255default NULL,  
  6.   `ARTICLE_CONTENT` text,  
  7.   PRIMARY KEY  (`ID`)  
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

    上面的数据 随便加一下吧,主要是article_content和article_title字段的数据,article_content是个text字段,所以你可以粘贴网页的文字内容添加到本字段中。

 

    2.业务接口 ArticleService.java

 

Java代码   收藏代码
  1. package com.jushi.lucene.business;  
  2.   
  3. import java.util.List;  
  4. import com.jushi.lucene.entities.Article;  
  5. /** 
  6.  * @Author jushi 
  7.  * @CreateDate Jun 4, 2010 1:24:42 PM 
  8.  * @Version V 1.0 
  9.  */  
  10.   
  11. public interface IArticleService {  
  12.   
  13.     public List<Article> getArticles(String query);  
  14.   
  15.     public boolean createIndex();  
  16.   
  17. }  

   3. 接口的实现 ArticleServiceImpl.java 主要的业务在这里实现:创建索引,搜索数据处理。

 

Java代码   收藏代码
  1. package com.jushi.lucene.business;  
  2.   
  3. import java.io.File;  
  4. import java.io.StringReader;  
  5. import java.util.ArrayList;  
  6. import java.util.Date;  
  7. import java.util.List;  
  8.   
  9. import org.apache.lucene.analysis.Analyzer;  
  10. import org.apache.lucene.analysis.TokenStream;  
  11. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  12. import org.apache.lucene.document.Document;  
  13. import org.apache.lucene.document.Field;  
  14. import org.apache.lucene.index.IndexWriter;  
  15. import org.apache.lucene.queryParser.MultiFieldQueryParser;  
  16. import org.apache.lucene.search.BooleanClause;  
  17. import org.apache.lucene.search.Filter;  
  18. import org.apache.lucene.search.IndexSearcher;  
  19. import org.apache.lucene.search.Query;  
  20. import org.apache.lucene.search.ScoreDoc;  
  21. import org.apache.lucene.search.TopDocs;  
  22. import org.apache.lucene.search.highlight.Highlighter;  
  23. import org.apache.lucene.search.highlight.QueryScorer;  
  24. import org.apache.lucene.search.highlight.SimpleFragmenter;  
  25. import org.apache.lucene.search.highlight.SimpleHTMLFormatter;  
  26. import org.apache.lucene.store.Directory;  
  27. import org.apache.lucene.store.FSDirectory;  
  28.   
  29. import com.jushi.lucene.dao.IArticleDAO;  
  30. import com.jushi.lucene.entities.Article;  
  31.   
  32. /** 
  33.  * @Author jushi 
  34.  * @CreateDate Jun 4, 2010 1:25:00 PM 
  35.  * @Version V 1.0 
  36.  */  
  37. public class ArticleServiceImpl implements IArticleService {  
  38.       
  39.     private IArticleDAO articleDAO;  
  40.       
  41.     private final String INDEXPATH = "g:\\index";  
  42.     private Analyzer analyzer = new StandardAnalyzer();  
  43.       
  44.     public List<Article> getArticles(String query) {  
  45.           
  46.         try{  
  47.         List<Article> qlist = new ArrayList<Article>();  
  48.         String fieldName = "title";  
  49.         IndexSearcher indexSearcher = new IndexSearcher(INDEXPATH);  
  50.           
  51.         //QueryParser parser = new QueryParser(fieldName, analyzer); //单 key 搜索  
  52.         //Query queryOBJ = parser.parse(query);  
  53.         System.out.println(">>> 2.开始读取索引... ... 通过关键字:【 "+ query +" 】");  
  54.         long begin = new Date().getTime();  
  55.           
  56.         //下面的是进行title,content 两个范围内进行收索.  
  57.         BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,BooleanClause.Occur.SHOULD };  
  58.         Query queryOBJ = MultiFieldQueryParser.parse(query, new String[]{"title","content"}, clauses, new StandardAnalyzer());//parser.parse(query);  
  59.         Filter filter = null;  
  60.           
  61.         //################# 搜索相似度最高的记录 ###################  
  62.         TopDocs topDocs = indexSearcher.search(queryOBJ, filter, 1000);  
  63.         //TopDocs topDocs = indexSearcher.search(queryOBJ , 10000);  
  64.         System.out.println("*** 共匹配:" + topDocs.totalHits + "个 ***");  
  65.           
  66.         Article article = null;  
  67.           
  68.         //输出结果  
  69.         for (ScoreDoc scoreDoc : topDocs.scoreDocs){  
  70.                 Document targetDoc = indexSearcher.doc(scoreDoc.doc);  
  71.                 article = new Article();  
  72.                   
  73.                 //设置高亮显示格式  
  74.                 SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'><strong>""</strong></font>");   
  75.                 /* 语法高亮显示设置 */  
  76.                 Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(queryOBJ));   
  77.                 highlighter.setTextFragmenter(new SimpleFragmenter(100));   
  78.                   
  79.                 // 设置高亮 设置 title,content 字段  
  80.                 String title = targetDoc.get("title");  
  81.                 String content = targetDoc.get("content");  
  82.                 TokenStream titleTokenStream = analyzer.tokenStream(fieldName,new StringReader(title));  
  83.                 TokenStream contentTokenStream = analyzer.tokenStream("content",new StringReader(content));  
  84.                 String highLightTitle = highlighter.getBestFragment(titleTokenStream, title);  
  85.                 String highLightContent = highlighter.getBestFragment(contentTokenStream, content);  
  86.                   
  87.                  if(highLightTitle == null)  
  88.                      highLightTitle = title;  
  89.   
  90.                  if(highLightContent == null)   
  91.                      highLightContent = content;  
  92.                    
  93.                 article.setTitle(highLightTitle);  
  94.                 article.setContent(highLightContent);  
  95.                 article.setTag(targetDoc.get("tag"));  
  96.                 article.setTotalHits(topDocs.totalHits);  
  97.                   
  98.                 qlist.add(article);  
  99.         }  
  100.           
  101.         long end = new Date().getTime();  
  102.         System.out.println(">>> 3.搜索完毕... ... 共花费:" + (end - begin) +"毫秒...");  
  103.           
  104.         indexSearcher.close();  
  105.           
  106.         return qlist;  
  107.           
  108.         }catch(Exception e){  
  109.             e.printStackTrace();  
  110.             return null;  
  111.         }  
  112.     }  
  113.       
  114.     public boolean createIndex()  
  115.     {  
  116.         //检查索引是否存在  
  117.         if(this.isIndexExisted())  
  118.             return this.isIndexExisted();  
  119.           
  120.         List<Article> list = articleDAO.getArticles();  
  121.           
  122.         try  
  123.         {  
  124.             Directory directory = FSDirectory.getDirectory(INDEXPATH);  
  125.             IndexWriter indexWriter = new IndexWriter(directory, analyzer ,true, IndexWriter.MaxFieldLength.LIMITED);  
  126.               
  127.             long begin = new Date().getTime();  
  128.             for(Article art: list)  
  129.             {  
  130.                 Document doc = new Document();  
  131.                 String title = art.getTitle() == null ? "" : art.getTitle().trim();  
  132.                 String content = art.getContent() == null ? "" : art.getContent();  
  133.                 String tag = art.getTag() == null ? "" : art.getTag();  
  134.                 doc.add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));  
  135.                 doc.add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));  
  136.                 doc.add(new Field("tag", tag, Field.Store.COMPRESS,Field.Index.NO));  
  137.                 indexWriter.addDocument(doc);  
  138.             }  
  139.             long end = new Date().getTime();  
  140.             System.out.println(">>> 1.存入索引完毕.. 共花费:" + (end - begin) +"毫秒...");  
  141.               
  142.             indexWriter.optimize();  
  143.             indexWriter.close();  
  144.             return true;  
  145.               
  146.         }catch(Exception e){  
  147.             e.printStackTrace();  
  148.             return false;  
  149.         }  
  150.     }  
  151.       
  152.     /** 
  153.      * check Index is Existed 
  154.      * @return true or false 
  155.      */  
  156.     private boolean isIndexExisted()  
  157.     {  
  158.         try  
  159.         {  
  160.             File dir = new File(INDEXPATH);  
  161.             if(dir.listFiles().length>0)  
  162.                 return true;  
  163.             else  
  164.                 return false;  
  165.               
  166.         }catch(Exception e){  
  167.             e.printStackTrace();  
  168.             return false;  
  169.         }  
  170.     }  
  171.       
  172.     public void setArticleDAO(IArticleDAO articleDAO) {  
  173.         this.articleDAO = articleDAO;  
  174.     }  
  175.   
  176. }  

    4. DAO 接口及 DAO实现 

 

Java代码   收藏代码
  1. public interface IArticleDAO {  
  2.   
  3.     public List<Article> getArticles();  
  4. }  

 

 

Java代码   收藏代码
  1. public class ArticleDAOImpl extends JdbcDaoSupport implements IArticleDAO{  
  2.   
  3.     public List<Article> getArticles() {  
  4.         String sql = "SELECT article_title, article_tag, article_content FROM t_article";  
  5.         return (List<Article>)this.getJdbcTemplate().query(sql, new ArticleRowMapper());  
  6.     }  
  7.   
  8. }  

 

   5. 上面DAO需要的 ArticleRowMapper: 这里做了下小改动

 

Java代码   收藏代码
  1. package com.jushi.lucene.rowmapper;  
  2.   
  3. import java.sql.ResultSet;  
  4. import java.sql.ResultSetMetaData;  
  5. import java.sql.SQLException;  
  6.   
  7. import org.springframework.jdbc.core.RowMapper;  
  8.   
  9. import com.jushi.lucene.entities.Article;  
  10.   
  11. /** 
  12.  * @Author jushi 
  13.  * @CreateDate Jun 4, 2010 1:31:54 PM 
  14.  * @Version V 1.0 
  15.  */  
  16. public class ArticleRowMapper implements RowMapper {  
  17.   
  18.     public Object mapRow(ResultSet rs, int rowNum) throws SQLException {  
  19.         Article article = new Article();  
  20.         ResultSetMetaData meta = rs.getMetaData();  
  21.         int colNum = meta.getColumnCount();  
  22.         for (int i = 1; i <= colNum; i++) {  
  23.             String colName = meta.getColumnName(i).toLowerCase();  
  24.             if ("article_title".equals(colName)) {  
  25.                 article.setTitle(rs.getString(i));  
  26.             } else if ("article_content".equals(colName)) {  
  27.                 article.setContent(rs.getString(i));  
  28.             } else if ("article_tag".equals(colName)) {  
  29.                 article.setTag(rs.getString(i));  
  30.                 //...  
  31.             }  
  32.         }  
  33.         return article;  
  34.     }  
  35. }  

 

   6. Article 实体 添加了两个属性: TotalHits, TotalTime

 

Java代码   收藏代码
  1. package com.jushi.lucene.entities;  
  2.   
  3. /** 
  4.  * @Author jushi 
  5.  * @CreateDate Jun 4, 2010 1:18:48 PM 
  6.  * @Version V 1.0 
  7.  */  
  8. public class Article {  
  9.   
  10.     private String title;  
  11.     private String content;  
  12.     private String tag;  
  13.     private int TotalHits; //命中率  
  14.     private int TotalTime; //花费时间  
  15.       
  16.     public int getTotalTime() {  
  17.         return TotalTime;  
  18.     }  
  19.     public void setTotalTime(int totalTime) {  
  20.         TotalTime = totalTime;  
  21.     }  
  22.     public String getTitle() {  
  23.         return title;  
  24.     }  
  25.     public void setTitle(String title) {  
  26.         this.title = title;  
  27.     }  
  28.     public String getContent() {  
  29.         return content;  
  30.     }  
  31.     public void setContent(String content) {  
  32.         this.content = content;  
  33.     }  
  34.     public String getTag() {  
  35.         return tag;  
  36.     }  
  37.     public void setTag(String tag) {  
  38.         this.tag = tag;  
  39.     }  
  40.     public int getTotalHits() {  
  41.         return TotalHits;  
  42.     }  
  43.     public void setTotalHits(int totalHits) {  
  44.         TotalHits = totalHits;  
  45.     }  
  46.       
  47. }  

 

   7. Spring 的配置如下:

   --- applicationContext-lucene.xml

 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3. <beans>  
  4.   
  5. <bean id="articleDAO" class="com.jushi.lucene.dao.ArticleDAOImpl" scope="singleton" >    
  6.     <property name="dataSource" ref="articleDataSource"></property>    
  7. </bean>  
  8.   
  9. <bean id="articleService" class="com.jushi.lucene.business.ArticleServiceImpl" scope="singleton" >    
  10.     <property name="articleDAO" ref="articleDAO"></property>   
  11. </bean>   
  12.     
  13. </beans>   

   ---  applicationContext-lucene-datasource.xml

 

 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3. <beans>  
  4.   
  5. <bean id="articleDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  6.     <property name="driverClassName" value="com.mysql.jdbc.Driver" ></property>  
  7.     <property name="url" value="jdbc:mysql://localhost/companyweb?useUnicode=true&amp;characterEncoding=utf-8" />  
  8.     <property name="username" value="root" />  
  9.     <property name="password" value="jushi" />  
  10.     <property name="initialSize" value="5" />  
  11.     <property name="maxActive" value="20" />  
  12.     <property name="maxIdle" value="20" />  
  13.     <property name="minIdle" value="5" />  
  14. </bean>   
  15.   
  16. </beans>   

 

   8. action配置 struts-config.xml

 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">  
  3.   
  4. <struts-config>  
  5.   
  6.     <form-beans>  
  7.        <form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm"/>  
  8.     </form-beans>  
  9.     <action-mappings>  
  10.       
  11.         <action path="/index"  
  12.                 type="com.jushi.lucene.businessview.IndexAction"  
  13.                 name="lazyForm" parameter="m" scope="request" validate="false">  
  14.                 <forward name="result" path="/result.jsp"></forward>  
  15.         </action>  
  16.   
  17.     </action-mappings>  
  18. </struts-config>  

 

    9. web.xml 文件配置: 监听、加载配置文件

 

 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.       
  8.     <context-param>  
  9.         <param-name>contextConfigLocation</param-name>  
  10.         <param-value>classpath*:/springConfig/applicationContext*.xml</param-value>  
  11.     </context-param>  
  12.       
  13.     <!--  Character Encoding filter -->  
  14.     <filter>  
  15.           <filter-name>encodingFilter</filter-name>  
  16.           <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  17.           <init-param>  
  18.                    <param-name>encoding</param-name>  
  19.                    <param-value>UTF-8</param-value>  
  20.           </init-param>  
  21.      </filter>  
  22.      <filter-mapping>  
  23.           <filter-name>encodingFilter</filter-name>  
  24.           <url-pattern>/*</url-pattern>  
  25.      </filter-mapping>  
  26.        
  27.      <listener>  
  28.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  29.     </listener>  
  30.       
  31.     <servlet>  
  32.         <servlet-name>action</servlet-name>  
  33.         <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  34.         <init-param>  
  35.             <param-name>config</param-name>  
  36.             <param-value>/WEB-INF/struts-config.xml</param-value>  
  37.         </init-param>  
  38.     </servlet>  
  39.   
  40.     <servlet-mapping>  
  41.         <servlet-name>action</servlet-name>  
  42.         <url-pattern>*.html</url-pattern>  
  43.     </servlet-mapping>  
  44.       
  45.   <welcome-file-list>  
  46.     <welcome-file>index.jsp</welcome-file>  
  47.   </welcome-file-list>  
  48. </web-app>  

 

   10. 前端 View 两个jsp index.jsp和 result.jsp

 

     index.jsp

Java代码   收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>简单的lucene测试</title>  
  13.     <script type="text/javascript" src="js/CheckFunction.js"></script>  
  14.     <script type="text/javascript">  
  15.         function _search()  
  16.         {  
  17.             var form = document.form1;  
  18.             if(Trim(form.title.value) == '')  
  19.             {  
  20.                 alert("输入一个关键字吧!");  
  21.                 return false;  
  22.             }  
  23.             form.action = 'index.html?m=index';  
  24.             form.submit();  
  25.         }  
  26.     </script>  
  27.   </head>  
  28.     
  29.   <body>  
  30.           
  31.         <center><h1>测试Lucene</h1>  
  32.         <hr/>  
  33.         <form name="form1" action="index.html" method="post">  
  34.         请输入文章的标题关键字:<input type="text" maxlength="20" name="title" size="40"/>&nbsp;  
  35.         <button onclick="javascript:_search();return false;" style="border: thin;border-color: blue" name="search"> GO </button>  
  36.         </form>  
  37.         </center>  
  38.   </body>  
  39. </html>  

 

    result.jsp

 

Java代码   收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ page import="com.jushi.lucene.entities.*"%>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7. <%  
  8.     List<Article> list = (List<Article>) request.getAttribute("articlelist");  
  9.     String TotalTime = "0.000";  
  10.     int TotalHits = 0;  
  11.     if(request.getAttribute("totalTime")!=null)  
  12.         TotalTime = request.getAttribute("totalTime").toString();  
  13.     if(list.size()>0 && list!=null)  
  14.         TotalHits = list.get(0).getTotalHits();   
  15. %>  
  16. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  17. <html>  
  18.   <head>  
  19.     <base href="<%=basePath%>">  
  20.     <title>搜索的结果如下:</title>  
  21.     <style type="text/css">  
  22.         .Fee {  
  23.             width: 650px;  
  24.             height:28px;  
  25.             float: right;  
  26.             padding:1px;  
  27.             overflow:hidden;  
  28.             border-bottom:1px solid #bde2ff;  
  29.             line-height:28px;  
  30.             font-family: '宋体';  
  31.             font-size: 15px;  
  32.             font-weight: bold;  
  33.         }  
  34.         .Fee span {  
  35.             color: red;  
  36.             font-size:14px;  
  37.         }  
  38.           
  39.     </style>  
  40.   </head>  
  41.     
  42.   <body>  
  43.     <div class="Fee">共搜到 <span><%=TotalHits %></span> 条结果. 共花费:<span&gt;<%=TotalTime %> </span>秒.</div><br/><br/&gt;  
  44.       
  45.     <table width="80%" height="70%" border="1" cellpadding="0" cellspacing="0" align="center">  
  46.             <tr height="20" bgcolor="#CCCCCC">  
  47.             <td align="center" width="20%">标题</td>  
  48.             <td align="center" width="60%">文章内容</td>  
  49.             <td align="center" width="20%">所属标签</td>  
  50.             </tr>  
  51.             <%  
  52.             if(list.size()>0){  
  53.             for(Article art : list){  
  54.                 String title = art.getTitle();  
  55.                 String content = art.getContent();  
  56.                 String tag = art.getTag();  
  57.             %>  
  58.             <tr>  
  59.                 <td><%=title %></td>  
  60.                 <td><%=content %></td>  
  61.                 <td><%=tag %></td>  
  62.             </tr>  
  63.             <%}}else{ %>  
  64.             <tr>  
  65.                 <td colspan="3" align="center"><h3>对不起...没有搜到相关信息..请尝试其他关键字!</h3></td>  
  66.             </tr>  
  67.             <%} %>  
  68.         </table>  
  69.         <br/>  
  70.         <center><a href="<%=basePath %>./">返回上一级</a></center>  
  71.   </body>  
  72. </html>  

 

    12. action:IndexAction.java

 

Java代码   收藏代码
  1. package com.jushi.lucene.businessview;  
  2.   
  3. import java.text.DecimalFormat;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6.   
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import org.apache.struts.action.ActionForm;  
  11. import org.apache.struts.action.ActionForward;  
  12. import org.apache.struts.action.ActionMapping;  
  13. import org.apache.struts.actions.DispatchAction;  
  14. import org.springframework.web.context.WebApplicationContext;  
  15. import org.springframework.web.context.support.WebApplicationContextUtils;  
  16.   
  17. import com.jushi.lucene.business.IArticleService;  
  18. import com.jushi.lucene.entities.Article;  
  19.   
  20. /** 
  21.  * @Author fenglong 
  22.  * @CreateDate Jun 4, 2010 1:50:02 PM 
  23.  * @Version V 1.0 
  24.  * @CopyRight 2010 jushi 
  25.  */  
  26. public class IndexAction extends DispatchAction {  
  27.   
  28.     public ActionForward index(ActionMapping mapping, ActionForm form,  
  29.             HttpServletRequest request, HttpServletResponse response)  
  30.             throws Exception {  
  31.   
  32.         WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext());  
  33.         IArticleService articleService = (IArticleService) wac.getBean("articleService");  
  34.   
  35.         String q = request.getParameter("title");  
  36.         DecimalFormat df = new DecimalFormat("#0.000");  
  37.           
  38.         if(articleService.createIndex()){  
  39.               
  40.             long begin = new Date().getTime();  
  41.             List<Article> list = articleService.getArticles(q);  
  42.             long end = new Date().getTime();  
  43.             double time = (double) (end - begin) / 1000;  
  44.             String timeStr = df.format(time);  
  45.               
  46.             request.setAttribute("totalTime", timeStr);  
  47.             request.setAttribute("articlelist", list);  
  48.               
  49.         }  
  50.           
  51.         return mapping.findForward("result");  
  52.     }  
  53.   
  54. }  

 

 

    好了,所有的配置已经完成了。大概就是个Lucene的简单实现。只是稍微的和Spring结合了一下。功能就是搜索数据,高亮显示关键字。页面不好看,逻辑教简单。

     欢迎拍砖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值