From acddb9bf99cc32f74a394ec02365e708f55ae1cd Mon Sep 17 00:00:00 2001 From: pelick <369447122@qq.com> Date: Mon, 13 May 2013 21:21:26 +0800 Subject: [PATCH] basic publication recommend based on search key --- AcademicSearchEngine/WebContent/home.jsp | 13 +-- AcademicSearchEngine/WebContent/js/index.js | 29 +++++- .../src/dcd/academic/DAO/UserDAO.java | 1 + .../dcd/academic/DAO/impl/SearchDaoImpl.java | 6 +- .../dcd/academic/DAO/impl/UserDaoImpl.java | 99 +++++++++++++++++++ .../dcd/academic/action/RecommendAction.java | 40 ++++++++ .../academic/action/SearchHistoryAction.java | 2 +- AcademicSearchEngine/src/struts.xml | 3 + 8 files changed, 175 insertions(+), 18 deletions(-) create mode 100644 AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java diff --git a/AcademicSearchEngine/WebContent/home.jsp b/AcademicSearchEngine/WebContent/home.jsp index d8a7ee0..d6dff18 100644 --- a/AcademicSearchEngine/WebContent/home.jsp +++ b/AcademicSearchEngine/WebContent/home.jsp @@ -108,18 +108,7 @@
-
- 论文 收藏了XXX的用户,还收藏了。。。 -
-
- 论文 收藏了XXX的用户,还收藏了。。。 -
-
- 论文 收藏了XXX的用户,还收藏了。。。 -
-
- 论文 收藏了XXX的用户,还收藏了。。。 -
+
diff --git a/AcademicSearchEngine/WebContent/js/index.js b/AcademicSearchEngine/WebContent/js/index.js index 7d0702b..26875c6 100644 --- a/AcademicSearchEngine/WebContent/js/index.js +++ b/AcademicSearchEngine/WebContent/js/index.js @@ -6,6 +6,8 @@ $(function() { $('#user_paper_btn').remove(); $('#share_history_btn').click(getUserGift($('#share_history_btn').attr("user"))); $('#share_history_btn').remove(); + $('#recommend_btn').click(doRecommend($('#recommend_btn').attr("user"))); + $('#recommend_btn').remove(); // index.jsp leftSide(); @@ -63,10 +65,10 @@ $(function() { showWordCloud(); }); - $('#related_btn').click(rightSide()); + $('#related_btn').click(relatedSide()); $('#related_btn').remove(); $('#related_btn').on("click", function(e) { - rightSide(); + relatedSide(); }); $('#rankpaper_btn').on("click", function(e) { @@ -162,6 +164,27 @@ function doRegister(user) { }); } +function doRecommend(name) { + $.ajax({ + type : 'GET', + url : "recommend?user="+name, + dataType : 'json', + success : function(data) { + var list = data.list; + for (var i = 0; i < list.length; i ++) { + $('#tab2').append('
论文推荐
' + + '关键词 ' + list[i].sk + '
' + +'Title'+ list[i].title +'
' + +''+list[i].author +' 收藏于 '+list[i].date + +'
'); + } + }, + error : function(XmlHttpRequest, textStatus, errorThrown) { + alert("recommend ajax error!"); + } + }); +} + function getUserAuthor(name) { $.ajax({ type : 'GET', @@ -291,7 +314,7 @@ function history(action) { } -function rightSide() { +function relatedSide() { var field = $("#rfield").val(); var place = $("#rplace").val(); var name = $("#rname").val(); diff --git a/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java b/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java index bc7af54..e879eac 100644 --- a/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java +++ b/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java @@ -15,4 +15,5 @@ public interface UserDAO { public ArrayList getUserAuthor(String name); public ArrayList getUserPaper(String name); + public ArrayList recommendPaper(String name); } diff --git a/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java b/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java index caad65e..f2967cc 100644 --- a/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java +++ b/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java @@ -52,7 +52,8 @@ public class SearchDaoImpl implements SearchDAO { pst = (PreparedStatement) con.prepareStatement(query); rs = pst.executeQuery(); while (rs.next()) { - hot.add("("+rs.getString("count").toString()+") "+rs.getString("sk").toString()); + if (!rs.getString("sk").toString().equals("undefined")) + hot.add("("+rs.getString("count").toString()+") "+rs.getString("sk").toString()); } } catch (Exception e) { e.printStackTrace(); @@ -80,7 +81,8 @@ public class SearchDaoImpl implements SearchDAO { pst = (PreparedStatement) con.prepareStatement(query); rs = pst.executeQuery(); while (rs.next()) { - newly.add(rs.getString("sk").toString()); + if (!rs.getString("sk").toString().equals("undefined")) + newly.add(rs.getString("sk").toString()); } } catch (Exception e) { e.printStackTrace(); diff --git a/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java b/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java index a99b331..a125c5f 100644 --- a/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java +++ b/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java @@ -3,6 +3,8 @@ package dcd.academic.DAO.impl; import java.sql.ResultSet; import java.util.ArrayList; +import javax.rmi.CORBA.Tie; + import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement; @@ -16,6 +18,103 @@ import dcd.academic.solrj.SolrjHelper; public class UserDaoImpl implements UserDAO { + @Override + public ArrayList recommendPaper(String name) { + ArrayList list = new ArrayList(); + ArrayList keys = getUserKeys(name); + ArrayList titles = getUserTitles(name); + for (String key : keys) { + String query = "select * from UserPaper where username<>? and sk=?;"; + Connection con = null; + PreparedStatement pst = null; + ResultSet rs = null; + DBConnectionManage dbmanage = DBConnectionManage.getInstance(); + + try { + con = dbmanage.getFreeConnection(); + pst = (PreparedStatement) con.prepareStatement(query); + pst.setString(1, name); + pst.setString(2, key); + rs = pst.executeQuery(); + while (rs.next()) { + if (!titles.contains(rs.getString("title").toString())) { + PublicationModel model = new PublicationModel(); + model.setSk(key); + model.setTitle(rs.getString("title").toString()); + model.setAuthor(rs.getString("username").toString()); + model.setDate(rs.getString("date").toString()); + list.add(model); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + dbmanage.closeConnection(con); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return list; + } + + private ArrayList getUserTitles(String name) { + ArrayList list = new ArrayList(); + String query = "select distinct title from UserPaper where username=?;"; + Connection con = null; + PreparedStatement pst = null; + ResultSet rs = null; + DBConnectionManage dbmanage = DBConnectionManage.getInstance(); + + try { + con = dbmanage.getFreeConnection(); + pst = (PreparedStatement) con.prepareStatement(query); + pst.setString(1, name); + rs = pst.executeQuery(); + while (rs.next()) { + list.add(rs.getString("title").toString()); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + dbmanage.closeConnection(con); + } catch (Exception e) { + e.printStackTrace(); + } + } + return list; + } + + private ArrayList getUserKeys(String name) { + ArrayList list = new ArrayList(); + String query = "SELECT distinct sk FROM userpaper where username =?;"; + Connection con = null; + PreparedStatement pst = null; + ResultSet rs = null; + DBConnectionManage dbmanage = DBConnectionManage.getInstance(); + + try { + con = dbmanage.getFreeConnection(); + pst = (PreparedStatement) con.prepareStatement(query); + pst.setString(1, name); + rs = pst.executeQuery(); + while (rs.next()) { + list.add(rs.getString("sk").toString()); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + dbmanage.closeConnection(con); + } catch (Exception e) { + e.printStackTrace(); + } + } + return list; + } + @Override public User getUser(String username) { User user = new User(); diff --git a/AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java b/AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java new file mode 100644 index 0000000..47dd1d4 --- /dev/null +++ b/AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java @@ -0,0 +1,40 @@ +package dcd.academic.action; + +import java.util.ArrayList; + +import com.opensymphony.xwork2.ActionSupport; + +import dcd.academic.DAO.DAOfactory; +import dcd.academic.model.PublicationModel; + +public class RecommendAction extends ActionSupport { + + private String user; + + public ArrayList list = new ArrayList(); + + @Override + public String execute() throws Exception { + list = DAOfactory.getUserDAO().recommendPaper(user); + return SUCCESS; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public ArrayList getList() { + return list; + } + + public void setList(ArrayList list) { + this.list = list; + } + + + +} diff --git a/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java b/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java index c49042e..462583d 100644 --- a/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java +++ b/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java @@ -27,7 +27,7 @@ public class SearchHistoryAction extends ActionSupport { SearchDAO dao = DAOfactory.getSearchDAO(); Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); - if (sk.length() > 2 && sk != null) { + if (!sk.equals("undefined") && sk != null) { dao.saveHistory(type, user, sk.toLowerCase(), date.toLocaleString()); } diff --git a/AcademicSearchEngine/src/struts.xml b/AcademicSearchEngine/src/struts.xml index 9b5d38f..c12c4d1 100644 --- a/AcademicSearchEngine/src/struts.xml +++ b/AcademicSearchEngine/src/struts.xml @@ -73,5 +73,8 @@ + + + \ No newline at end of file