C#+Ajax站内搜索引擎系统的设计与实现+Lucene(3)
时间:2016-12-21 10:55 来源:毕业论文 作者:毕业论文 点击:次
引用 检索 图3 代码结构 2、索引生成模块 这部分包含对文本的索引生成以及对数据库数据的索引生成,下面只对数据库索引生成的关键代码进行介绍: 下面这段代码实现对数据库里存储的记录创建索引。主要通过Lucene提供的方法来协助实现。 首先通过标准分词定义了一个索引写入器 IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true); 在创建索引库时,会合并多个Segments文件。此方式有助于减少索引文件数量,减少同时打开的文件数量。 writer.SetUseCompoundFile(false); //删除以前生成的索引文件。 System.IO.Directory.Delete(iDexDir,true); #endregion DateTime start = DateTime.Now; DoIndexByDB(writer);// DateTime end = DateTime.Now; int docNum = writer.DocCount(); Console.WriteLine("Index Finished. {0} Documents takes {1} second.", docNum, ((TimeSpan)(end - start)).TotalSeconds); writer.Optimize(); writer.Close(); 使用Lucene提供的方法对数据库中的每条记录建立索引实现如下: Document doc = new Document(); Console.WriteLine("Indexing {0} ", row["title"].ToString()); doc.Add(Field.Text("contents", row["content"].ToString())); doc.Add(Field.Keyword("title", row["title"].ToString())); doc.Add(Field.Keyword("mata",row["mata"].ToString())); doc.Add(Field.Keyword("CreateDate",row["CreateDate"].ToString())); doc.Add(Field.Keyword("Url",row["Url"].ToString())); doc.Add(Field.Keyword("ID",row["ID"].ToString())); writer.AddDocument(doc); 3、页面查询模块 这部分主要完成的功能是获取前台表单中输入的关键字,在程序中获取查询结果,最后把列表显示在前台页面。 Ajax在此部分中被使用到,它完成的功能是部分刷新页面,不需整个页面的重新加载。为了方便的在程序中使用Ajax,此系统引用了封装完善的Ajax类库。在程序中注册后,在html里就可以使用Javascript来调用后台的程序。选取部分代码来说明: 首先在页面后台程序中进行Ajax注册。 如果前台Javascript需要调用某个方法,那就在那个函数前加上[AjaxPro.AjaxMethod],表示此方法属于ajax应用。 其中,前台所存在的文字的代码如下: StringBuilder sb = new StringBuilder(); sb.Append("<tr><td>结果数:"+result+" 所用时间:"+t+"毫秒</td></tr>"); 前台显示结果记录的代码,动态生成table标签,如下: 在显示内容中,仍然使用到了Lucene提供的类,可以方便的从所建立的索引文档中获取网址,网页标题,内容,时间。 Document doc = hits.Doc(i); content=doc.Get("contents"); content=content.Replace(keywords,"<font color=red>"+keywords+"</font>"); sb.Append("<tr class="+c+">"); sb.Append("<td><a href="+doc.Get("Url")+">"+doc.Get("title")+"</a></td>"); sb.Append("</tr>"); sb.Append("<tr class="+c+">"); sb.Append("<td>"+content+"<br>"+doc.Get("CreateDate")+"</td>"); sb.Append("</tr>"); (责任编辑:qin) |