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<String> fieldsNeedLoaded=new HashSet<String>(1);
                fieldsNeedLoaded.add("title");
                @SuppressWarnings("unchecked")
                List<AtomicReader> subReaders=(List<AtomicReader>)
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<topDocs.totalHits;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<subReader.maxDoc()){
                                        double 
pagerank=sources[idx].getFloat(realDoc);
                                        System.out.println(pagerank);
                                        break;
                                }
                                docBase+=subReader.maxDoc();
                        }
                }
        }

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to