>Also note that , topdocs.totalhits will always give u total number of hits, >regardless of the number of score doc u choose to retrieve. > topdocs.scoredocs will have min(totalhits, ndocs) docs populated.
Is it Ok use Integer.MaxValue as nDoc ? On 24 December 2010 17:13, Jawahar Lal <j...@chambal.com> wrote: > I open a IndexReader. I want to see how many docs are indexed, to get this > count I used > > objReader.maxDoc() ... its returning me 0. > > How can I get the total no. of docs in index? > > > On 24 December 2010 16:36, Jawahar Lal <j...@chambal.com> wrote: > >> Thanks Umesh >> >> I want to know more about Filters, how to use that using lucene 3.0.3 >> >> Can I get links to learn how/when to use filters. >> >> jawahar >> >> >> On 24 December 2010 16:25, Umesh Prasad <umesh.i...@gmail.com> wrote: >> >>> Yes. >>> >>> Also note that , topdocs.totalhits will always give u total number of >>> hits, >>> regardless of the number of score doc u choose to retrieve. >>> topdocs.scoredocs will have min(totalhits, ndocs) docs populated. >>> >>> >>> On Fri, Dec 24, 2010 at 2:48 PM, Jawahar Lal <j...@chambal.com> wrote: >>> >>> > ok, I understand. >>> > >>> > It means, that we have to fetch total no. of docs i.e. >>> > >>> > Suppose we need to show 100 docs per page >>> > >>> > Page No. NDocs No. of documents to be shown on Page >>> > 1 100 0-99 >>> > 2 200 100-199 >>> > 3 300 200-299 & so on... >>> > >>> > >>> > >>> > >>> > >>> > On 24 December 2010 12:35, Umesh Prasad <umesh.i...@gmail.com> wrote: >>> > >>> > > Hi Jawahar, >>> > > http://search-lucene.com/m/duTpc14AmzV >>> > > See Uwe's reply. >>> > > >>> > > >>> > > >>> > > Regards >>> > > Umesh >>> > > >>> > > PS: I would use search-lucene.com to 1st check if a solution is >>> posted >>> > > already. It is really good. >>> > > >>> > > ------------------------ >>> > > QUOTED UWE's reply >>> > > ---------------------- >>> > > >>> > > To get the second page, >>> > > Take: >>> > > int hitsPerPage = 10; >>> > > int pageOffset = 10; >>> > > TopDocCollector collector = new TopDocCollector(hitsPerPage + >>> > pageOffset); >>> > > >>> > > For page third page take int pageOffset = 20; and so on >>> > > >>> > > After that your results are in hits[], for the first page in [0] to >>> [9], >>> > > the >>> > > second page in [10] to [19] and so on: >>> > > >>> > > To display use something like: >>> > > For (int i=pageOffset; Math.min(hitsPerPage + pageOffset, >>> > > collector.topDocs().totalhits); i++) >>> > > >>> > > In general, you cannot retrieve a range directly, you can only >>> retrieve >>> > the >>> > > top docs. As most people will not go beyond say page 10 when >>> searching, >>> > you >>> > > have no memory problem, as scoreDocs will contain at most 100 doc >>> ids. >>> > > >>> > > --------------- >>> > > ------------------- >>> > > >>> > > >>> > > On Fri, Dec 24, 2010 at 10:40 AM, Jawahar Lal <j...@chambal.com> >>> wrote: >>> > > >>> > > > Hi, >>> > > > >>> > > > I search for an query. Total searched records are 5000. I only >>> shows >>> > 100 >>> > > > records on one page. So I passed 100 as nDocs. >>> > > > >>> > > > I write the code in this way. >>> > > > >>> > > > IndexSearcher searcher = new >>> > IndexSearcher(FSDirectory.open(new >>> > > > File(path))); >>> > > > >>> > > > Query query = new QueryParser(Version.LUCENE_30, >>> "field1", >>> > new >>> > > > StandardAnalyzer(Version.LUCENE_30)).parse("query"); >>> > > > Query query1 = new QueryParser(Version.LUCENE_30, >>> "field2", >>> > > new >>> > > > StandardAnalyzer(Version.LUCENE_30)).parse("query2"); >>> > > > BooleanQuery lucBoolQueryOTHER = new BooleanQuery(); >>> > > > lucBoolQueryOTHER.add(query, Occur.MUST); >>> > > > lucBoolQueryOTHER.add(query1, Occur.MUST); >>> > > > >>> > > > TopDocs hits=searcher.search(query, null, 100); >>> > > > >>> > > > System.err.println("Total searched " + hits.totalHits); >>> >> >>> > > > 5000 >>> > > > System.err.println("Total docs " + >>> hits.scoreDocs.length); >>> > >> >>> > > > 100 >>> > > > >>> > > > // The code to print 100 records on first page >>> > > > for(int i=0;i<hits.scoreDocs.length;i++){ >>> > > > >>> > > > >>> > > > >>> > > >>> > >>> System.out.println(searcher.doc(hits.scoreDocs[i].doc).getField("filename")); >>> > > > } >>> > > > >>> > > > it worked fine. >>> > > > >>> > > > // Now I want to show all next search documents on Second >>> Pages...when >>> > I >>> > > > tried in this way, I got the error. >>> > > > for(int i=100;i<hits.totalHits;i++){ >>> > > > >>> > > > >>> > > > >>> > > >>> > >>> System.out.println(searcher.doc(hits.scoreDocs[i].doc).getField("filename")); >>> > > > } >>> > > > >>> > > > searcher.close(); >>> > > > >>> > > > java.lang.ArrayIndexOutOfBoundsException: 100 >>> > > > at Test.searchIndex(Test.java:96) >>> > > > at Test.main(Test.java:54) >>> > > > >>> > > > Would need to perform searching again with different parameters to >>> > fetch >>> > > > next bunch of records ? >>> > > > >>> > > > >>> > > > >>> > > > >>> > > > Thanks >>> > > > >>> > > >>> > > >>> > > >>> > > -- >>> > > --- >>> > > Thanks & Regards >>> > > Umesh Prasad >>> > > >>> > >>> >>> >>> >>> -- >>> --- >>> Thanks & Regards >>> Umesh Prasad >>> >> >> >