首页 新闻 会员 周边

Lucene.net对数据库百万条数据进行建索引,检索高亮分页返回Datatable

0
悬赏园豆:100 [待解决问题]

本人是新手,正在学习Lucene.net,需要Lucene.net对数据库百万条数据进行建索引,检索高亮分页返回Datatable的DEMO,求前辈们指点一下,我的QQ:362511544,

向磊的主页 向磊 | 初学一级 | 园豆:10
提问于:2012-04-10 09:20
< >
分享
所有回答(3)
0
dudu | 园豆:30994 (高人七级) | 2012-04-10 11:58

建索引和检索我会,我目前就是还没有开窍,需要一个Demo的例子让我开一下窍,这个Demo要包含检索高亮分页功能,更新,其实我目前困惑的就是检索后怎么进行高亮分页,和更新问题,由于我才刚进入这个行业,对这些困惑的很,需要高人指教一下.....

支持(0) 反对(0) 向磊 | 园豆:10 (初学一级) | 2012-04-10 12:05
0
void Page_Load(object sender, EventArgs e)
        {
            KeyWord = Request["kw"];
            if (string.IsNullOrEmpty(KeyWord) == false)
            {
                literalDissect.Text = string.Join(" ", DiscuzSearcher.Dissect(KeyWord).ToArray());
                literalDissect.Visible = true;

                var pager = new SearchSite.Ctrls.RupengPager();protected 
                pager.PageSize = 10;
                pager.TryParseCurrentPageIndex(Request["pagenum"]);

                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                //启动搜索
                DiscuzSearcher searcher = new DiscuzSearcher();
                int startRowIndex = (pager.CurrentPageIndex-1) * pager.PageSize;
                var result = searcher.Search(KeyWord, startRowIndex, pager.PageSize);
                stopwatch.Stop();
                pager.TotalCount = searcher.TotalCount;

                //显示统计结果
                Stastics = String.Format("找到相关网页约{0}篇,用时{1}毫秒", searcher.TotalCount, stopwatch.ElapsedMilliseconds);

                repeatorResult.DataSource = result;
                repeatorResult.DataBind();
                
                pager.UrlFormat = GetPageAbsolutePath()+"?pagenum={n}&kw=" 
                    + HttpUtility.UrlEncode(KeyWord);
                PagerHTML = pager.Render();//渲染页码条HTML

                this.Title = KeyWord + "-站内搜索";
                log.Debug(string.Format("ip地址为{0}的用户搜索{1}", Request.UserHostAddress, KeyWord));
                new So_KeywordLogBLL().InsertKeyWord(KeyWord, Request.UserHostAddress);
            }
            else
            {
                this.Title = "站内搜索";
            }
        }
Halower | 园豆:1723 (小虾三级) | 2012-04-10 13:03

自己写了一个分页控件”需要可以给你。

支持(1) 反对(0) Halower | 园豆:1723 (小虾三级) | 2012-04-10 13:07

能更具体点嘛,对数据库操作

支持(0) 反对(0) 向磊 | 园豆:10 (初学一级) | 2012-04-10 13:14

IndexSearcher是进行搜索的类,构造函数传递一个IndexReader。IndexSearcher的void Search(Query query, Filter filter, Collector results)方法用来搜索,Query是查询条件, filter目前传递null, results是检索结果,TopScoreDocCollector.create(1000, true)方法创建一个Collector,1000表示最多结果条数,Collector就是一个结果收集器。
Query有很多子类,PhraseQuery是一个子类。 PhraseQuery用来进行多个关键词的检索,调用Add方法添加关键词,query.Add(new Term("字段名", 关键词)),PhraseQuery. SetSlop(int slop)用来设置关键词之间的最大距离,默认是0,设置了Slop以后哪怕文档中两个关键词之间没有紧挨着也能找到。
query.Add(new Term("字段名", 关键词))
query.Add(new Term("字段名", 关键词2))
类似于:where 字段名 contains 关键词 and 字段名 contais 关键词2

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2012-04-10 13:34
0

建立索引,高亮显示,搜索这些都比较容易实现的 分词器最好用盘古分词器。Lucene主要是分页没有给出实现,需要自己实现的  方案您可以参考http://wenku.baidu.com/view/72069ed97f1922791688e81b.html?from=rec&amp;pos=0&amp;weight=7&amp;lastweight=2&amp;count=4  有四种实现方案  

实现您可以参考

http://wenku.baidu.com/view/10fc19360b4c2e3f572763e1.html

http://www.cnblogs.com/lonely7345/archive/2008/06/27/1231354.html

因为最近在做其它项目,站内搜索的项目分页还没有实现,在这也不多说 只给些我前一段时间浏览的文档 希望对您有帮助

代码哥 | 园豆:187 (初学一级) | 2012-04-10 14:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册