解决方案 »

  1.   

    没看懂你在说什么啊 @webdiyer 来
      

  2.   

    http://www.cnblogs.com/qianlifeng/archive/2011/03/31/2001273.html 给你个使用的例子。
      

  3.   

    不是显示部分数据了,看来你对分页的PageSize属性不是很了解,比如说你总共有20条数据,那么PageSize=1表示每页显示1条,那么就有20页,而如果你每页显示10条,那么就只有两页了。
      

  4.   

    后台代码:
    namespace PatentLucenceDemo.Web.测试搜索分页
    {
        public partial class SearchPaged : System.Web.UI.Page
        {
            BLL.Aspatent bllasp = new BLL.Aspatent();
            protected void Page_Load(object sender, EventArgs e)
            {
                if (IsPostBack)
                {
                    if (!string.IsNullOrEmpty(Request.Form["create"]))
                    {
                        CreateContent();
                    }
                    if (!string.IsNullOrEmpty(Request.Form["search"]))
                    {
                        string content = Request.Form["content"];
                        string date1 = Convert.ToDateTime(Request.Form["date1"]).ToString("yyyyMMdd");
                        string date2 = Convert.ToDateTime(Request.Form["date2"]).ToString("yyyyMMdd");
                        Response.Redirect("SearchPaged.aspx?content=" + content + "&date1=" + date1 + "&date2=" + date2 + "");
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["content"]))
                    {
                        SearchContent();
                    }
                }
            }
            #region 创建索引
            private void CreateContent()
            {
                string indexPath = @"C:\Users\otsoftadmin\Documents\Visual Studio 2010\Projects\PatentLucenceDemo\lucenedir2";//注意和磁盘上文件夹的大小写一致,否则会报错。将创建的分词内容放在该目录下。
                FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NativeFSLockFactory());//指定索引文件(打开索引目录) FS指的是就是FileSystem
                bool isUpdate = IndexReader.IndexExists(directory);//IndexReader:对索引进行读取的类。该语句的作用:判断索引库文件夹是否存在以及索引特征文件是否存在。
                if (isUpdate)
                {
                    
                    if (IndexWriter.IsLocked(directory))
                    {
                        IndexWriter.Unlock(directory);
                    }
                }
                IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isUpdate, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);//向索引库中写索引。这时在这里加锁。
                List<Model.Aspatent> listasp = bllasp.GetModelList("");
                foreach (Model.Aspatent model in listasp)
                {
                    writer.DeleteDocuments(new Term("id", model.id.ToString()));
                    writer.DeleteDocuments(new Term("AN", model.AN));
                    writer.DeleteDocuments(new Term("TI", model.TI));
                    Document document = new Document();
                    document.Add(new Field("id", model.id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                    document.Add(new Field("AN", model.AN, Field.Store.YES, Field.Index.NOT_ANALYZED));
                    document.Add(new Field("TI", model.TI, Field.Store.YES, Field.Index.ANALYZED, Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS));
                    document.Add(new Field("PD", Convert.ToDateTime(model.PD).ToString("yyyyMMdd"), Field.Store.YES, Field.Index.NOT_ANALYZED));
                    writer.AddDocument(document);
                }
                writer.Close();//会自动解锁。
                directory.Close();//不要忘了Close,否
            }
            #endregion
            #region 搜索设置
            private void SearchContent()
            {
                string content = HttpContext.Current.Request.QueryString["content"];
                string date1 = HttpContext.Current.Request.QueryString["date1"];
                string date2 = HttpContext.Current.Request.QueryString["date2"];
                string indexPath = @"C:\Users\otsoftadmin\Documents\Visual Studio 2010\Projects\PatentLucenceDemo\lucenedir2";//最好将该项放在配置文件中。
                string kw = content;
                kw = kw.ToLower();
                FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory());
                IndexReader reader = IndexReader.Open(directory, true);
                IndexSearcher searcher = new IndexSearcher(reader);
                //过滤器
                TermRangeFilter filter = new TermRangeFilter("PD", date1, date2, true, true);
                //排序
                Sort sort = new Sort("id", true);
                //搜索条件
                PhraseQuery query = new PhraseQuery();
                foreach (string word in SearchHelper.SplitWord(kw))//将用户输入的搜索内容进行了盘古分词、
                {
                    query.Add(new Term("TI", word));
                }
                query.SetSlop(100);//多个查询条件的词之间的最大距离.在文章中相隔太远 也就无意义.
                //TopScoreDocCollector是盛放查询结果的容器,用于分页的一种容器
                TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
                searcher.Search(query, filter, collector);//根据query查询条件进行查询,查询结果放入collector容器
                int PageIndex = AspNetPager1.CurrentPageIndex;
                int PageSize = AspNetPager1.PageSize;
                int RowCount = collector.GetTotalHits();
                int PageCount = Convert.ToInt32(Math.Ceiling((RowCount * 1.0) / PageSize));
                AspNetPager1.RecordCount = PageCount;
                ScoreDoc[] docs = collector.TopDocs((PageIndex - 1) * PageSize, PageSize).scoreDocs;//得到所有查询结果中的文档,GetTotalHits():表示总条数   TopDocs(300, 20);//表示得到300(从300开始),到320(结束)的文档内容.       //可以用来实现分页功能
                List<SearchResult> list = new List<SearchResult>();
                for (int i = 0; i < docs.Length; i++)
                {
                    int docId = docs[i].doc;//得到查询结果文档的id(Lucene内部分配的id)
                    Document doc = searcher.Doc(docId);//找到文档id对应的文档详细信息
                    SearchResult result = new SearchResult();
                    result.TI = SearchHelper.Highlight(kw, doc.Get("TI"));
                    result.AN = doc.Get("AN");
                    result.id = doc.Get("id");
                    list.Add(result);
                }
                this.SearchRepeater.DataSource = list;
                this.SearchRepeater.DataBind();
            }
            public void AspNetPager1_PageChanging(object src, PageChangingEventArgs e)
            {
                AspNetPager1.CurrentPageIndex = e.NewPageIndex;
                SearchContent();
            }
            #endregion
        }
    前台代码:
    <body>
        <form id="form1" runat="server">
         <div>
        请输入搜索内容<input id="content" name="content" type="text"/>
        <input id="create" name="create" type="submit" value= "创建索引" />
        <input id="search" name="search" type="submit" value="搜索" />
        <input id="date1" name="date1" class="Wdate" type="text" onClick="WdatePicker()"/> 
        <input id="date2" name="date2" class="Wdate" type="text" onClick="WdatePicker()"/> 
        </div>
        <div>
        <ul>
            <asp:Repeater ID="SearchRepeater" runat="server">
            <ItemTemplate>
            <li>
             <%#Eval("id")%>
            <br />
            <%#Eval("AN")%>
            <br />
            <%#Eval("TI")%>
            </li>
            </ItemTemplate>
            </asp:Repeater>
            </ul>
        </div>
       <webdiyer:AspNetPager ID="AspNetPager1" runat="server"  PrevPageText="上一页" NextPageText="下一页" ShowPageIndex="true" PageSize="1" PageIndexBoxType="DropDownList" OnPageChanging="AspNetPager1_PageChanging">
        </webdiyer:AspNetPager>
        </form>
    </body>
      

  5.   

    搜索同样的内容,共173条记录,按照pagesize为1应该是173页,pagesize为10的话应该是18页,现在的问题是搜同样的内容的时候,当把pagesize设为1的时候,数据是正常显示正在分页,总页数为173,当pagesize设为10的时候,数据只能显示前两页,正常应该是显示18页的数据
      

  6.   

    <a href = "http:www.baidu.com"></a>