lucene检索不出mysql数据库数据??

藍色的海 发布于 2012/04/17 18:38
阅读 1K+
收藏 3

我通过lucene来检索查询Mysql数据库的数据,从而在jsp页面显示出来,但没有结果,我个人找不出哪里不对,麻烦各位帮我看看...

Mysql数据库表:tb_goods(商品表)

创建索引的程序代码:

public ResultSet getResult(){
		   conn=DBCon.getConn();
		   ResultSet rs=null;
		   String sql="select * from tb_goods";
		   try{
		   pstmt=conn.prepareStatement(sql);
		   rs=pstmt.executeQuery();
		   }catch(Exception e){
			   e.printStackTrace();
		   }
		   return rs;
	   }
	   
	   public void Index(ResultSet rs){
		   try{
			   IndexWriter writer=new IndexWriter(GoodsDAO.INDEX_STORE_PATH, getAnalyzer(), true);
			   while(rs.next()){
				   Goods goods=new Goods();
				   goods.setGoodsName(rs.getString("goodsName"));
				   goods.setGoodsPic(rs.getString("goodsPic"));
				   goods.setDescri(rs.getString("descri"));
				   Document doc=new Document();
				   doc.add(Field.Keyword("goodsName",goods.getGoodsName()));
				   doc.add(Field.Keyword("goodsPic", goods.getGoodsPic()));
				   doc.add(Field.Keyword("descri",goods.getDescri()));
				   writer.addDocument(doc);
			   }
			   writer.optimize();
			   writer.close();
		   }catch(Exception e){
			   e.printStackTrace();
		   }
	   }
	   
	   public Hits search(String keyword){
		   Hits hits=null;
		   try{
			   IndexSearcher searcher=new IndexSearcher(GoodsDAO.INDEX_STORE_PATH);
			   Query query=QueryParser.parse(keyword, "goodsName", getAnalyzer());
			   hits=searcher.search(query);
		   }catch(Exception e){
			   e.printStackTrace();
		   }
		   return hits;
	   }
	   
	   public Analyzer getAnalyzer(){
		   return new StandardAnalyzer();
		 }

	   
	   public static void main(String args[]){
		 ResultSet rs=GoodsDAO.getGoodsDAO().getResult();
		  GoodsDAO.getGoodsDAO().Index(rs);
		  System.out.println("创建索引成功!!");
	  }

运行主方法后,有在c:\\index目录下创建索引,如图:

处理检索的servlet代码如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		Hits  hits=GoodsDAO.getGoodsDAO().search(request.getParameter("keyword"));
		request.setAttribute("hits", hits);
		RequestDispatcher dispatcher=request.getRequestDispatcher("luceneGoods.jsp");
		dispatcher.forward(request, response);
	}

显示查询结果页面代码如下:

<%
  Hits hits=(Hits)request.getAttribute("hits");
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Lucene引擎搜索商品页面</title>
</head>
<body>
   
      <%
       if(hits!=null){%>
        <table>
       <tr>
     <td>商品名称</td><td>商品图片</td><td>商品描述</td>
     </tr>
    <%
     for(int i=0;i<hits.length();i++){
    	 Document doc=hits.doc(i);
     %>
    	<tr>
    	  <td>百度</td>
    	  <td><%=doc.get("goodsName")%></td>
    	  <td><%=doc.get("goodsPic")%></td>
    	  <td><%=doc.get("descri") %></td>
    	</tr> 
    	</table>
     <%}
      %>
      <%}
      %>

显示结果如下:

就是没有相应的结果显示出来???想不出来哪错了

加载中
0
红薯
红薯

Lucene 的搜索不同 MySQL 的 LIKE 搜索,如果你的分词用的不当,搜不到很正常的。

你数据库都有什么内容,你搜索什么关键字呢?

0
藍色的海
藍色的海

引用来自“红薯”的答案

Lucene 的搜索不同 MySQL 的 LIKE 搜索,如果你的分词用的不当,搜不到很正常的。

你数据库都有什么内容,你搜索什么关键字呢?

我在搜索框输入的是数据表goodsName字段的值,

我就直接在搜索框输入 商品14

红薯
红薯
输入商品能收到吗?
0
藍色的海
藍色的海

引用来自“じ☆veィ尔惢”的答案

引用来自“红薯”的答案

Lucene 的搜索不同 MySQL 的 LIKE 搜索,如果你的分词用的不当,搜不到很正常的。

你数据库都有什么内容,你搜索什么关键字呢?

我在搜索框输入的是数据表goodsName字段的值,

我就直接在搜索框输入 商品14

也是不行

我把这段代码

 

       doc.add(Field.Keyword("goodsName",goods.getGoodsName()));
       doc.add(Field.Keyword("goodsPic", goods.getGoodsPic()));
       doc.add(Field.Keyword("descri",goods.getDescri()));

改成这样

       doc.add(Field.UnStored("goodsName",rs.getString("goodsName")));
       doc.add(Field.UnStored("goodsPic", rs.getString("goodsPic")));
       doc.add(Field.UnStored("descri", rs.getString("descri")));

也都不行

0
藍色的海
藍色的海
原来是在表单提交忘加了一个method="post"
0
红薯
红薯

引用来自“じ☆veィ尔惢”的答案

原来是在表单提交忘加了一个method="post"
对于 GET 也要支持啊,要不然搜索结果太多需要分页的时候你怎么办,因此你需要对参数进行转码
wsg
wsg
@红薯 @红薯 (⊙o⊙)哦,原来是这样啊。以后就知道了。我刚弄的这个还是呼哧呼哧地用session保存的这些条件来着呢。
红薯
红薯
@wsg 当然是GET方便省事
wsg
wsg
正好我也遇到一个分页问题。也来问一下。<br> 分页的时候,用到的条件(检索条件,页码等)是放在URL后面用get方法好呢还是用post方法好呢还是怎么都无所谓呢?一般是推荐什么方法呢?
0
藍色的海
藍色的海

引用来自“红薯”的答案

引用来自“じ☆veィ尔惢”的答案

原来是在表单提交忘加了一个method="post"
对于 GET 也要支持啊,要不然搜索结果太多需要分页的时候你怎么办,因此你需要对参数进行转码

嗯,好的

返回顶部
顶部