/** * 關鍵詞提醒 * @param keyword * @return */ public List remindKeyword(String keyword){ List keywordList = new ArrayList(); IndexReader indexReader; try { File indexDir = new File(INDEX_STORE_PATH); if (indexDir.exists()){ indexReader = IndexReader.open(INDEX_STORE_PATH); //以輸入的文字開頭,搜索contents的關鍵詞 Term sterm = new Term("contents",keyword); TermEnum termEnum = indexReader.terms(sterm); while (true){ Term term = termEnum.term(); if (term == null || (!term.text().startsWith(keyword))){ break; } //關鍵詞出現的位置 TermPositions termPositions = indexReader.termPositions(term); //關鍵詞出現的頻率 int frq = termPositions.freq(); while (termPositions.next()){ frq = frq + termPositions.freq(); } if (frq >0){ Map keyElt = new HashMap(); keyElt.put("KEY", term.text()); keyElt.put("VALUE", String.valueOf(frq)); //System.out.println(term.text()+":"+frq); keywordList.add(keyElt); } termEnum.next(); } // 以輸入的文字開頭,搜索topic的關鍵詞 List keywordList2 = new ArrayList(); sterm = new Term("topic",keyword); termEnum = indexReader.terms(sterm); while (true){ Term term = termEnum.term(); if (term == null || (!term.text().startsWith(keyword))){ break; } //關鍵詞出現的位置 TermPositions termPositions = indexReader.termPositions(term); //關鍵詞出現的頻率 int frq = termPositions.freq(); while (termPositions.next()){ frq = frq + termPositions.freq(); } if (frq > 0){ Map keyElt = new HashMap(); keyElt.put("KEY", term.text()); keyElt.put("VALUE", String.valueOf(frq)); //System.out.println(term.text()+":"+frq); keywordList2.add(keyElt); } termEnum.next(); } //合並相同的關鍵詞 if (keywordList.size() >0 && keywordList2.size()>0){ int i=0; int j=0; Map elt1 = (Map)keywordList.get(0); Map elt2 = (Map)keywordList2.get(0); while (true){ String text1 = (String)elt1.get("KEY"); String text2 = (String)elt2.get("KEY"); int compare = text1.compareTo(text2); if (compare == 0){ int frq = Integer.valueOf((String)elt1.get("VALUE")) + Integer.valueOf((String)elt2.get("VALUE")); elt1.put("VALUE", String.valueOf(frq)); keywordList2.remove(j); if(++j < keywordList2.size() && ++i < keywordList.size()){ elt1 = (Map)keywordList.get(i); elt2 = (Map)keywordList2.get(j); } else{ break; } } else if(compare > 0){ if (++j < keywordList2.size()){ elt2 = (Map)keywordList2.get(j); } else{ break; } } else { if (++i < keywordList.size()){ elt1 = (Map)keywordList.get(i); } else{ break; } } } } keywordList.addAll(keywordList2); indexReader.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new LuceneException(); } //依出現次數排序 Comparator<Map> itemComparator = new Comparator<Map>() { public int compare(Map a, Map b) { return Integer.valueOf((String)a.get("VALUE")).intValue() - Integer.valueOf((String)b.get("VALUE")).intValue(); } }; Collections.sort(keywordList, Collections.reverseOrder(itemComparator)); int maxSize = keywordList.size(); if (maxSize > 10) maxSize = 10; keywordList = keywordList.subList(0, maxSize); return keywordList; }
function getAlert(tagetpara,e){ alertObj = tagetpara; alertEvent = e; //alert(tagetpara.name); var keyword = tagetpara.value; if (keyword != ''){ AjaxService.remindKeyword(keyword,refreshKeywordList); return !showPopup(alertObj.name,'USER_ALERT_DIV',event, alertEvent); } } function refreshKeywordList(data){ reply01(data); } function getsearchpara(data,indexnum){ alertObj.value=data[indexnum]['KEY']; hideCurrentPopup(); } var reply01 = function(data){ dwr.util.removeAllRows(useralert); dwr.util.addRows( useralert, data, cellFunctions, { rowCreator:function(options) { var row = document.createElement("tr"); row.className = "table_row_single"; row.onclick=function (){ getsearchpara(data,this.rowIndex); }; row.onmouseover=function (){ onMouseOver(this); }; row.onmouseout=function (){ onMouseOut(this,'table_row_single'); }; return row; }, cellCreator:function(options) { var td = document.createElement("td"); td.className="table_list_column"; return td; } } ); } var cellFunctions = [ function(keyword) { return keyword.KEY; }, function(keyword) { return keyword.VALUE;} ];
<div CLASS="bubble_panel01" id="USER_ALERT_DIV" STYLE="WIDTH:200px" onClick="event.cancelBubble = true;"> <TABLE ID="T1180684588156_TABLE" CLASS="table_bg" STYLE="MARGIN-BOTTOM:16px" STYLE="WIDTH:200px" BORDER="0" CELLPADDING="0" CELLSPACING="0"> <TBODY ID="useralert"> </TBODY> </TABLE> </div>
.bubble_panel01 { BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; VISIBILITY: hidden; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; WIDTH: 200px; POSITION: absolute; BACKGROUND-COLOR: white; LAYER-BACKGROUND-COLOR: yellow } .table_row_single01{ background-color: #FFFFFF; line-height: 20px; onmouseover: expression(onmouseover=function (){this.style.backgroundColor ='#FFFF99'}); onmouseout: expression(onmouseout=function (){this.style.backgroundColor ='#FFFFFF'}); } .table_list_column01 { font-family: Arial; font-size: 11px; text-decoration: none; padding-left: 4px; padding-right: 4px; line-height: 20px; }