[转载]使用Lucene.net提升网站搜索速度整合记录 - Miao31 - 博客园

[转载]使用Lucene.net提升网站搜索速度整合记录 – Miao31 – 博客园.

 

查询代码

复制代码
        //网站搜索代码
        public static void Search(string keyword,int typeid,int pageNo)
        {
            int onePage=20;//一页多少
            int TotalNum=1000;//一次加载多少

            if (pageNo < 0) pageNo = 0;
            if (pageNo * onePage > TotalNum)
                pageNo = TotalNum / onePage;

            //索引加载的目录
            DirectoryInfo INDEX_DIR = new DirectoryInfo(m_indexPath+"//Index//index1");
            IndexSearcher searcher = new IndexSearcher(FSDirectory.Open(INDEX_DIR), true);
            QueryParser qp = new QueryParser(Version.LUCENE_30, "keyContent", analyzer);
            Query query = qp.Parse(keyword); 
            //Console.WriteLine("query> {0}", query);

            //设置排序问题
            Sort sort = new Sort(new SortField[]{new SortField("recvTimes", SortField.INT, true),new SortField("updateTime", SortField.STRING, true)});

            //设置高亮显示的问题
            PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("<font color=\"red\">", "</font>");
            PanGu.HighLight.Highlighter highlighter =new PanGu.HighLight.Highlighter(simpleHTMLFormatter,new Segment());
            highlighter.FragmentSize = 50;

            TopFieldDocs tds = searcher.Search(query,null, 1000, sort);
            Console.WriteLine("TotalHits: " + tds.TotalHits);

            /* 计算显示的条目 */
            int count = tds.ScoreDocs.Length;
            int start = (pageNo - 1) * onePage;
            int end = pageNo * onePage > count ? count : pageNo * onePage;
            //返回集合列表
            for (int i = start; i < end; i++)
            {
                Document doc = searcher.Doc(tds.ScoreDocs[i].Doc);
                string contentResult = highlighter.GetBestFragment(keyword, doc.Get("keyContent").ToString());
                Console.WriteLine(contentResult + ">>" + doc.Get("recvTimes") + "<<" + doc.Get("updateTime"));
            }

            searcher.Dispose();
        }
复制代码

 

 服务器部署的问题                                          

当你觉得本地都运行的好好的时候,发现到服务器上根本就运行不了,一直报错.

由于Lucene.net最新版本直接使用了net4.0,服务器是64们的WIN2003,而且运行的网站都还是32位的net2.0的DLL,所以升级到4.0怎么也出不来

1.运行显示的错误是提示没有.net4.0的框架,需要注册.net4.0

直接到网上找如何搞定显示ASP.NET选项卡的问题,最后找到文章方法是:

停止iis直接删除C:/WINDOWS/system32/inetsrv/MetaBase.xml中的Enable32BitAppOnWin64=”TRUE” 行

重启IIS后选项卡到是出来了,但net.2.0的网站全部挂掉,运行不起来,http://h31bt.com网站也运行不起来,

Enable32BitAppOnWin64的意思是允许运行32们的程序,所以此方法不行.

 

2.另外找的文章都是重新注册net 4.0

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

开始执行试了好多次,没有效果,这里也允许了,重新安装了好几次Net4.0.

 

3.最后一次在停止IIS后,再次全部注册net2.0,4.0,然后

cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
重启IIS后,出现的错误终于不再是上面的.

新错误是:

Server Application Unavailable

4.通过网上查找资料 

解决办法: 在IIS中新建一个应用程序池,然后选中你的 基于.net
framework4.0的虚拟目录,点“属性”-》在“应用程序池” 中选择刚才新建的的应用程序池,点击“确定”。

最后服务器网站http://h31bt.com终于运行起来了.

  Lucene.net搜索的效果                                          

1.经过目前测试,目前服务器4G的内存搜索速度比以前需要5S左右的LIKE强了很多倍,基本上都在1S以内;

2.由于Lucene索引是基于文件的索引,从而使SQL数据库的使用压力减轻不少,这样给其它程序的整体压力减少不少,网站效果还行.

3.目前500万的数据重新建立一次索引需要1小时左右,但是网站运行的时候去更新索引速度目前感觉比较慢.比如要更新点击次数和更新时间等时,发现新的问题来了,这块的时间比较长.

4.目前考虑的方案是几天一次全部重新建立索引一次,平时只是添加数据.

希望有了解的朋友在此留言指教下lucene.net方面的性能优化问题,大家一起共同学习进步.

 

大家看累了,就移步到娱乐区http://h31bt.com 去看看速度如何,休息下…

希望大家多多推荐哦…大家的推荐才是下一篇介绍的动力…

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏