js| Full-text Search
Full-Text Search is always the key technology in the Web, how to find the information you want is the most concerned. The famous Google is a very successful example, most people on the Internet use Google to find what they need. Full-Text search has two main technical indicators: fast and accurate. Some time ago to do a news system, the boss to add the full text search function, think for a long time before using a less sophisticated method to achieve. Now share, hope is a good idea, if we have a better way please follow:
Let me introduce my news system: The basic information of the database, such as title, publisher, release time, main news file name. The news subject is a static page in HTML format (the first is to increase the speed and reduce the pressure on the database.) The second is that the database handles large strings with problems. )。 The idea of full text search is: first from the database to retrieve all the news, the main news found, and then through IO operation of the main news read into a string. Then remove the extra stuff, like HTML tags, and then use regular expressions to find the string, and if you find the right information, record the news. The final return of all eligible news is displayed to the user.
The following code is the code to enter the query criteria, the query keyword separated by "+": search.jsp
<link rel= "stylesheet" href= "Css/style3.css" >
<title> News Search </title>
<script language= "JavaScript" >
Function Subform ()
{
if (document.zl_form.keyword.value== "")
{
Alert ("Please enter the keyword!") ");
Document.zl_form.keyword.focus ();
return false;
}
return true;
}
</script>
<body bgcolor= "#F0F6E2" >
<form name= "Zl_form" target= "_new" method= "post" action= "aftsearch.jsp" >
<table width= "bgcolor=" "#F0F6E2" >
<tr>
<TD colspan= "4" height= "ten" > </td>
</tr>
<tr>
<TD width= "14%" > Input query Keywords:</td>
<TD align= "left" width= "65%" >
<input size= "type=" "text" name= "keyword" style= "font-size:9pt" >
<input type= "Submit" name= "submit" value= "search" style= "font-size:9pt" >
</td>
</tr>
<tr>
<TD colspan= "2" height= "9" align= "left" >
<br>
<font color= "Red" size= "+1" > Description: If there are multiple query conditions, the middle with </font><font size= "+2" >+</font><font color= "Red" size= "+1" > separated. such as:1+2+3+4...</font></td>
</tr>
</table>
</form>
</body>
The following code is the code for the Full-text retrieval principal JavaBean: Newssearch.java
Package NEWS;
Import java.sql.*;
Import java.lang.*;
Import java.text.*;
Import java.util.*;
Import java.io.*;
Import java.util.regex.*;
Import dbstep.idbmanager2000;//Database Operations Bean
public class Newssearch {
Private String filepath=null;//The contents of the main news store
Private String keyword=null;//Query keyword
Private vector news = new vector ()//Hold eligible results
Public Newssearch () {}
public void SetFilePath (String s) {
This.filepath=s;
}
public void Setkeyword (String s) {
This.keyword=s;
}
Public Vector GetResult () {
return news;
}
public void Search () {
Open Database
ResultSet Result=null;
String Msql=null;
PreparedStatement Prestmt=null;
dbstep.idbmanager2000 dbaobj=new dbstep.idbmanager2000 ();
Dbaobj.openconnection ();
try {
Retrieve all the News
Msql= "SELECT * from T_news_detail ORDER by release_time Desc";
Result=dbaobj.executequery (mSQL);
while (Result.next ())
{
String id=result.getstring ("id");
String title=result.getstring ("title");
String release_time=result.getstring ("Release_time");
String news_type=result.getstring ("type");
String content=result.getstring ("content");
String man_add=result.getstring ("Man_add");
Read files by row
String trace=filepath+content+ ". html";
FileReader myfilereader=new FileReader (trace);
BufferedReader mybufferedreader=new BufferedReader (Myfilereader);
String Mystring=null;
String Resultstring=new string ();
while ((Mystring=mybufferedreader.readline ())!=null)
{
resultstring=resultstring+mystring;
}
Remove extra characters
Htmlencode.htmlencode html=new Htmlencode.htmlencode ();//This bean removes the extra characters, the news is the file that you generate, and you can remove as many extra characters as possible.
Resultstring=html.textencode (resultstring);
Myfilereader.close ();
Remove Query Keywords
Pattern P=null;
Matcher M=null;
p = pattern.compile ("\\\\\\\\+");
String[] A=p.split (KeyWord)//To separate the key words with +
Full-Text Search
String searchresult= "1";//Search results
int i;
for (i=0;i<a.length;i++)//Search by keyword, record the result if all the keywords are met
{
p = pattern.compile (a[i].tostring ());
m = P.matcher (resultstring);
if (!) ( M.find ()) {
searchresult= "0";
}
}
Keep track of eligible news
if (Searchresult.equals ("1"))
{
News Resultnews=new News ()//The class that holds the result is basically consistent with the structure of the database
Resultnews.content=content;
Resultnews.release_time=release_time;
Resultnews.type=news_type;
Resultnews.man_add=man_add;
Resultnews.title=title;
News.addelement (resultnews);//final result set, to return to the client
}
}
Close Database
Dbaobj.closeconnection ();
/span>}catch (Exception e) {
System.out.println (E.tostring ());
}
}
public class News {//class that holds results
String content;
String Release_time;
String type;
String Man_add;
String title;
Public String getcontent () {return this.content;}
Public String GetTitle () {return this.title;}
Public String GetTime () {return this.release_time;}
Public String GetType () {return this.type;}
Public String Getman_add () {return this.man_add;}
}
}
The following code is called: aftsearch.jsp
<%@ page contenttype= "text/html; charset=gb2312 "%>
<%@ page import= "java.util.*"%>
<%
Request.setcharacterencoding ("GB2312");
String keyword=request.getparameter ("keyword"); Receive key words
String Trace=getservletcontext (). Getrealpath ("/") + "xwxx\\\\\\\\news\\\\\\\\";//main News store path
News.newssearch newssearch=new News.newssearch ();//Initialize the retrieved bean
Newssearch.setfilepath (Trace)//Set principal news path
Newssearch.setkeyword (keyword);//Setting keywords
Newssearch.search ()//Search
Vector News=newssearch.getresult ()//Get Results
%>
<title> News Search </title>
<meta http-equiv= "Cache-control" content= "No-cache" >
<link rel= "stylesheet" href= ". /css/style3.css ">
&l;script language= "JavaScript" >
function Open_window (ID)
{
locat= "./news/" +id+ ". html";
window.open (Locat, "new", "width=550,height=500, Scrollbars=yes")
}
</script>
<object id=hh2 classid= "Clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" >
<param name= "Command" value= "Maximize" ></object>
<body bgcolor= #F5FAF3 leftmargin= "0" topmargin= "0" marginwidth= "0" marginheight= "0" >
<script>
HH2. Click ();
</script>
<table width= "621" border= "0" >
<tr>
<TD colspan=5>
</font>
</td>
</tr>
<tr valign= "Middle" >
<TD width= "45%" height= ">"
<div align= "center" class = "T_header" > title </div>
</td>
<TD width= "15%" height= ">"
<div align= "center" class = "T_header" > Category </div>
</td>
<TD width= "15%" height= ">"
<div align= "center" class = "T_header" > Publisher </div>
</td>
<TD width= "25%" height= ">"
<div align= "center" class = "T_header" > Release time </div>
</td>
</tr>
<tr bgcolor= "#B7D79F" valign= "Middle" >
<TD colspan= "4" height= "2" ></td>
</tr>
</table>
<table width= "624" border= "0" bordercolor= "#99CCFF" >
<%
String Color=null;
int j=0;
if (!) ( News.size () ==0)) {
for (int i = 0; i < news.size (); i++) {
j + +;
NEWS.newsSearch.News mynews= (NEWS.newsSearch.News) news.get (i);
if (i%2==0)
{color= "#F5FAF3";}
else {color= "#DBF7ED";}
%>
<TR bgcolor = "<%=color%>" >
<TD width= "45%" height= ">"
<a href= "#" > <%=mynews.gettitle ()%></a>
</td>
<TD width= "15%" height= "align=" "Center" >
<%=mynews.gettype ()%>
&nbs; </td>
<TD width= "15%" height= "align=" "Center" >
<%=mynews.getman_add ()%>
</td>
<TD width= "25%" height= "align=" "Center" >
<%=mynews.gettime ()%>
</td>
</tr>
<%}} else{out.println ("Sorry, no search to the news you are looking for");}//And the top else, to determine if there is a record%>
<tr bgcolor= "#B7D79F" >
<TD colspan= "4" height= "2" ></td>
</tr>
<tr>
<TD colspan=4>
<p align=right>
</td>
</tr>
</table>
<p align=center> A total of search news <%=j%> articles
</body>