Return-Path: X-Original-To: apmail-lucene-java-user-archive@www.apache.org Delivered-To: apmail-lucene-java-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4428CDA5B for ; Mon, 6 Aug 2012 09:47:41 +0000 (UTC) Received: (qmail 8824 invoked by uid 500); 6 Aug 2012 09:47:39 -0000 Delivered-To: apmail-lucene-java-user-archive@lucene.apache.org Received: (qmail 8568 invoked by uid 500); 6 Aug 2012 09:47:35 -0000 Mailing-List: contact java-user-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-user@lucene.apache.org Delivered-To: mailing list java-user@lucene.apache.org Received: (qmail 8543 invoked by uid 99); 6 Aug 2012 09:47:34 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Aug 2012 09:47:34 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=FSL_RCVD_USER,HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of uwe@thetaphi.de designates 188.138.97.18 as permitted sender) Received: from [188.138.97.18] (HELO mail.sd-datasolutions.de) (188.138.97.18) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Aug 2012 09:47:27 +0000 Received: from localhost (dslb-084-057-074-185.pools.arcor-ip.net [84.57.74.185]) by mail.sd-datasolutions.de (Postfix) with ESMTPSA id 81DF114AA06F for ; Mon, 6 Aug 2012 09:47:06 +0000 (UTC) User-Agent: K-9 Mail for Android In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----UQVF41GGLZ843VCRY2PQ9VHHJFF7A4" Subject: Re: questions about DocValues in 4.0 alpha From: Uwe Schindler Date: Mon, 06 Aug 2012 11:47:00 +0200 To: java-user@lucene.apache.org Message-ID: <5a89eb57-05c7-4105-a915-a19bf86655da@email.android.com> ------UQVF41GGLZ843VCRY2PQ9VHHJFF7A4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit You have to call getTopReaderContext on the directory reader and can loop easily over the leaves using leaves(). All docbases are then relative to the directory reader. If you get the top reader context from the atomic reader itsself its only relative to itsself, which does not help. getSequentialSubReaders might get protected before release anyway. Uwe Li Li schrieb: >hi everyone, > in lucene 4.0 alpha, I found the DocValues are available and gave >it a try. I am following the slides in >http://www.slideshare.net/lucenerevolution/willnauer-simon-doc-values-column-stride-fields-in-lucene > I have got 2 questions. > 1. is DocValues updatable now? > > 2. How can I get docBase of an AtomicReader? > in Collector, it's easy to get docBase. But I need to get >docValues after scoring. I find >AtomicReader.getTopReaderContext().docBaseInParent >and subReader.getTopReaderContext().docBase. But neither of them is >correct. > So I have to iterate through all subReaders and use maxDoc() >to find suitable subReader for a docID. any better method to find >corresponding AtomicReader of a docID? > File d=new File("./testIndex"); > IndexWriterConfig cfg=new IndexWriterConfig(Version.LUCENE_40, new >WhitespaceAnalyzer(Version.LUCENE_40)); > cfg.setOpenMode(OpenMode.CREATE); > Directory dir=FSDirectory.open(d); > IndexWriter writer=new IndexWriter(dir,cfg); > FieldType titleFieldType=new FieldType(); > titleFieldType.setStored(true); > titleFieldType.setIndexed(true); > titleFieldType.setTokenized(true); > titleFieldType.setOmitNorms(true); > > Document doc=new Document(); > Field f=new Field("title","a b c",titleFieldType); > doc.add(f); > > FloatDocValuesField dvf=new FloatDocValuesField("pagerank", 0.8f); > doc.add(dvf); > > writer.addDocument(doc); > > doc=new Document(); > doc.add(new Field("title","b d",titleFieldType)); > dvf=new FloatDocValuesField("pagerank", 0.5f); > doc.add(dvf); > writer.addDocument(doc); > > writer.commit(); > > doc=new Document(); > doc.add(new Field("title","a c",titleFieldType)); > dvf=new FloatDocValuesField("pagerank", 0.5f); > doc.add(dvf); > writer.addDocument(doc); > > > DirectoryReader reader=DirectoryReader.open(writer, true); > IndexSearcher searcher=new IndexSearcher(reader); > Query q=new TermQuery(new Term("title","a")); > TopDocs topDocs=searcher.search(q, 10); > Set fieldsNeedLoaded=new HashSet(1); > fieldsNeedLoaded.add("title"); > @SuppressWarnings("unchecked") > List subReaders=(List) >reader.getSequentialSubReaders(); > Source[] sources=new Source[subReaders.size()]; > int idx=0; > for(AtomicReader subReader:subReaders){ > sources[idx++]=subReader.docValues("pagerank").getSource(); > } > > for(int i=0;i int docId=topDocs.scoreDocs[i].doc; > float score=topDocs.scoreDocs[i].score; > //get title > Document document=searcher.document(docId, fieldsNeedLoaded); > System.out.println("title: " +document.get("title")+" score: >"+score); > idx=-1; > int docBase=0; > for(AtomicReader subReader:subReaders){ > idx++; > //int docBase=subReader.getTopReaderContext().docBaseInParent; > > int realDoc=docId-docBase; > if(realDoc>=0&&realDoc double pagerank=sources[idx].getFloat(realDoc); > System.out.println(pagerank); > break; > } > docBase+=subReader.maxDoc(); > } > } > } > >--------------------------------------------------------------------- >To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org >For additional commands, e-mail: java-user-help@lucene.apache.org -- Uwe Schindler H.-H.-Meier-Allee 63, 28213 Bremen http://www.thetaphi.de ------UQVF41GGLZ843VCRY2PQ9VHHJFF7A4--