怎么使用LuceneNet技术实现伪静态列表.doc_第1页
怎么使用LuceneNet技术实现伪静态列表.doc_第2页
怎么使用LuceneNet技术实现伪静态列表.doc_第3页
怎么使用LuceneNet技术实现伪静态列表.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

怎么利用Lucene.Net搜索结果,实现伪静态的文章列表大家都知道Lucene.Net是一款优秀的开源全文搜索引挚,笔者发现很多网站项目都使用该引挚,特别是开源的项目更是,显然Lucene.Net有着比其它开源全文搜索引挚更多的优势。具体的优势,网上有很多例子,这里就不谈了,有兴趣的网友可以自己搜索了解一下。今天的目的是:怎么把高性能的Lucene.Net全文搜索引挚和显示新闻列表结合起来,组成使用Lucene.Net技术,实现伪静态列表。实现之前先了解一下为什么要这样做?笔者就先从静态页面与伪静态页面谈起。第一:使用Lucene.Net实现伪静态的前提问题?大家都知道为了更好的被各大搜索引挚更好的收录,都会把网站内容生成静态页面或伪静态页面。其中的静态与伪静态页面的优缺点,各位站长朋友都非常了解,这里笔者也深有体会,就简单谈一下。1、静态页面访问快,收录效果也好,特别像我们这种苦逼站长,要自己托管服务器,相信很多站长和我一样,没有资金,网站能不能盈利还不知道!唉,那只能买虚拟空间,想提高访问速度快,就只能在程序上下点功夫,所以最好全站全部生成静态页面。但生成静态页面的首要条件是必须有能生成静态页面的功能程序,虽然市面上有很多CMS但,能满足个性化、专业化的,还是要自己动手写。我的上一篇文章也提到,像我的医院导航网就是自己手写代码,而非使用目录程序或CMS生成。任何事情有优势,必有劣势。如果数据量大,全站静态页面,需要空间更大,生成速度也会慢。例如:导航网站,还得分一些属性生成,按科室、地区、医院等级、医院类型、医院大全等,这都将生成庞大的静态页面,所以笔者网站除首页、医院地区导航、医院科室导航每天更新,其他页面只能一个星期更新一次,明显信息更新不及时。于是乎想起了伪静态,即能最更新及时,又能满足SEO的要求,接下谈一下我对伪静态的实践。2、伪静态页面,优点笔者就不谈了,谈一下劣势。伪静态就是假的静态,通过重写组件实现。但还是要读取数据库中的数据,打开页面明显比纯静态页面慢了很多,用户体验不好。怎么才能更好的解决伪静态的劣势,笔者想了很多方法,像:升级空间、换空间商等等。升级空间,现在的主机商唉,站长朋友都深有体会吧,像40人合租的服务器,其实早就超过40人了。换空间商,现在网站备案,虽然不用再次备案,但还得邮寄资料等等,也很麻烦。怎么解决这些劣势呢?接下来笔者将使用Lucene.Net实现网站的伪静态列表,既能更新及时(前提是索引及时更新),打开速度又快,何乐而不为呢?第二:Lucene.Net实现的方法1、Lucene.Net生成索引这个如果不懂的,请大家参看我的博文,怎么使用Lucene.Net生成索引。2、怎么实现伪静态列表a、首先实现新闻列表示例(News表)从索引查询出来的动态页面功能,该表有以下字段(classid,tilte,content,adddate,author)。一般全文搜索是只有一个关键字,如果列表显示,还需加上除标题,还有更新日期、新闻类型的搜索条件。那就需要使用Lucene.Net搜索传递几个关键字,本示例传递(classid,keyword)有二个关键字,看以下后台代码:本示例使用的Lucene.Net版本:。需要引用的命名空间有:using Lucene.Net.Index;using Lucene.Net.Documents;using Lucene.Net.Analysis.Standard;using Lucene.Net.Search;using Lucene.Net.QueryParsers;using Lucene.Net.Analysis;protected List SearchResult = null;/定义显示列表SearchResult =Search(classid, title, psize, currentpage, out totalcount);请看Search功能定义:/ / 检索(新闻信息列表)主要参数有:类型id,标题/ / 新闻类型id/ 关键字(可查询标题)/ 分页大小/ 当前页码/ 返回总记录数/ / public List Search(string classid, string keyword, int pagesize, int pageno, out int totalcount) int _type_num = types.Length; IndexSearcher searchers = new IndexSearcher1; /可以直接指定索引存储目录路径! searchers0 = new IndexSearcher(HttpContext.Current.Server.MapPath(索引存储目录); MultiSearcher search = new MultiSearcher(searchers); BooleanQuery bq = new BooleanQuery(); if (classid!= 0) Term Term_class = new Term(classid, classid); /这是特定的搜索,将显示指定的类型新闻内容 var termQuery = new TermQuery(Term_class); bq.Add(termQuery, BooleanClause.Occur.MUST); string fields = title ; /定义需要查询的字段 Query query = MultiFieldQueryParser.Parse(keywords, fields, flags, new StandardAnalyzer(); /parser.Parse(keywords); bq.Add(query, BooleanClause.Occur.MUST);/添加到条件 Hits hits = search.Search(bq); List result = new List(); totalcount = hits.Length(); if (totalcount 0) int i = (pageno - 1) * pagesize; while (i totalcount & result.Count pagesize) SearchItem news = null; news = new SearchItem(); news.Id = hits.Doc(i).Get(id); news.Title = hits.Doc(i).Get(title);news.Url = hits.Doc(i).Get(url); news.AddDate = hits.Doc(i).Get(adddate); result.Add(news); i+; search.Close(); return result; else return null; 再看前台aspx文件代码:全    部分类下有 条新闻 %if (SearchResult != null) for (int i = 0; i a href= title= target=_blankupdate: 以上显示的列表就是从索引文件读取的,这种速度比从数据库获取快,接下来怎么实现伪

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论