Пейджинг результатов поиска Lucene.Net asp.net

я хочу сделать разбивку на страницы для результатов поиска lucene.net. когда я извлекаю данные из индекса, мне нужно получить только 10 записей на каждой странице. поэтому я ищу трюк с пейджингом lucene.net, и я получил ответ, который мне не ясен. вот он...пожалуйста, посмотрите.

Hits hits = searcher.search(query);
int offset = page * recordsPerPage;
int count = Math.min(hits.length() - offset, recordsPerPage);
for (int i = 0; i < count; ++i) {
    Document doc = hits.doc(offset + i);

}

TopDocs topDocs = indexSearcher.Search(query, null, 150);
for(int i=100, i<min(topDocs.totalHits,150); i++) {
Document doc = indexSearcher.doc(topDocs.scoreDocs[i]);

// Do something with the doc
}

Мне просто нужно знать, есть ли лучшая техника для этого. Пожалуйста, обсудите. спасибо

Отсюда начинается мое обновление

другой способ, который я использовал для поиска index. после получения вашего кода я попытался включить его в свой код, но получил ошибку. пожалуйста, посмотрите на мой код и преобразуйте его таким образом, чтобы я мог использовать вашу логику подкачки.

вот мой код

            int PageIndex=0;
            int PageSize=10;
            searcher = new IndexSearcher(_directory, false);
            Query qry = MultiFieldQueryParser.Parse(Version.LUCENE_29, multiWordPhrase, fieldList, occurs.ToArray(), new StandardAnalyzer(Version.LUCENE_29));
            TopDocs topDocs = searcher.Search(qry, null, ((PageIndex + 1) * PageSize), Sort.RELEVANCE);

            int resultsCount = topDocs.TotalHits;
            lblMatchFound.Text = "Match Found " + resultsCount.ToString();

            List<SearchResult> list = new List<SearchResult>();
            SearchResult oSr = null;


            if (topDocs != null)
            {
                ScoreDoc[] scoreDocs = topDocs.ScoreDocs;
                foreach (ScoreDoc scoreDoc in scoreDocs)
                {
                    Document doc = searcher.Doc(scoreDoc.doc);
                    oSr = new SearchResult();
                    oSr.ID = doc.Get("ID");
                    oSr.Title = doc.Get("Title");
                    oSr.Description = doc.Get("Description");
                    //oSr.WordCount = AllExtension.WordCount(oSr.Description, WordExist(oSr.Title, multiWordPhrase));
                    string preview =
                    oSr.Description = AllExtension.HighlightKeywords(oSr.Description, multiWordPhrase);  //sr.Description;
                    oSr.Url = doc.Get("Url");
                    list.Add(oSr);
                }
            }

пожалуйста, посмотрите и реструктурируйте мой код таким образом, чтобы я мог выполнять пейджинг. спасибо

5
задан Thomas 13 July 2012 в 08:28
поделиться