初探站内搜索(下)

建立好Index数据库之后,我们就可以开始进行检索了。首先我们在sql2005中建立一个关键字索引表SearchLog表

字段如下:在SearchDateTime上建立一个索引,因为该字段需要经常查询,这是优化数据库最基本的哦。

这样我们在VS2008中添加一个强类型DataSet,把表拖到DataSet视图上生成强类型类,接着添加SQLHelper类来访问数据库。
数据访问层:
SQLHelper.cs代码如下:这里我们只需要返回个DataTable,如果有需要的话自己可以再天加点方法进去
1 public class SQLHelper
2 {
3 public static string connstr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
4
5 public static DataTable ExecuteDataTable(string sql,params SqlParameter[] parameters)
6 {
7
8 using (SqlConnection conn = new SqlConnection(connstr))
9 {
10 conn.Open();
11 using (SqlCommand cmd = conn.CreateCommand())
12 {
13 cmd.CommandText = sql;
14 cmd.Parameters.AddRange(parameters);
15 DataSet dataset = new DataSet();
16 using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
17 {
18 adapter.Fill(dataset);
19 }
20 return dataset.Tables[0];
21 }
22 }
23 }
24
25 }

最后在SearchSuggestion.ashx一般处理程序中实现对用户在浏览器端输入关键字改变之后的AJAX请求:

1 public class SearchSuggestion : IHttpHandler
2 {
3
4 public void ProcessRequest(HttpContext context)
5 {//服务器返回搜索建议词汇的时候将词汇以字符串数组的形式(JSon)返回给浏览器
6   context.Response.ContentType = "text/plain";
7 string term=context .Request ["term"];//通过httpwatch看出我们从客户端页面传过来的参数是term
8 //string[] strs = { "baidu", "google", "sina" };
9  
10 DataTable table = SQLHelper.ExecuteDataTable("select distinct KeyWord from SearchLog where KeyWord like @word", new SqlParameter("word", "%" + term + "%"));
11 List<string> list = new List<string>();
12 for (int i = 0; i < table.Rows.Count; i++)
13 {
14 string word = Convert.ToString(table.Rows[i][0]);
15 list.Add(word);
16 }
17
18 JavaScriptSerializer jss = new JavaScriptSerializer();
19 context.Response.Write(jss.Serialize(list));
20 }
21
22 public bool IsReusable
23 {
24 get
25 {
26 return false;
27 }
28 }
29 }

这样客户端浏览器的JQueryUI就实现了点击自动补全功能然后查选该热门关键词。有关前台调用JQuery的代码在上一篇日志有。

最后在web.config中设置我们要从哪个服务器下载的网页 

<appSettings>
    <add key="SiteURL" value="http://localhost:8081/" />   
  </appSettings>

OK~至此我的站内搜索学习算告一段落了

谢谢各位~

 
原文地址:https://www.cnblogs.com/lys_013/p/1852188.html