Package org.apache.solr.request.uninverted

Source Code of org.apache.solr.request.uninverted.RamDocValueFill

package org.apache.solr.request.uninverted;

import java.io.IOException;
import java.util.ArrayList;

import org.apache.lucene.index.DocValuesReader;
import org.apache.solr.request.BlockBufferPool.BlockArray;
import org.apache.solr.request.uninverted.TermIndex.IndexSearch;
import org.apache.solr.request.uninverted.UnInvertedFieldUtils.FieldDatatype;
import org.apache.solr.search.BitDocSet;
import org.apache.solr.search.DocIterator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RamDocValueFill {
  public static Logger log = LoggerFactory.getLogger(RamDocValueFill.class);

  public static int Fill(UnInvertedField inv, int maxdoc, boolean isinit,
      TermIndex ti, DocValuesReader quicktisInput, int fieldNumber,
      boolean isReadDouble, BitDocSet baseAdvanceDocs)
      throws IOException, CloneNotSupportedException {
    long l0=System.currentTimeMillis();

    boolean isreadText=isinit&&(!isReadDouble);
    DocValuesReader docValues = (DocValuesReader) quicktisInput.clone();
      docValues.seekTo(fieldNumber,isreadText );
      int doc = -1;
      int tm = 0;
      long l1=System.currentTimeMillis();

      if (inv.fieldDataType == FieldDatatype.d_double) {
        if (baseAdvanceDocs != null) {
          DocIterator iter = baseAdvanceDocs.iterator();
          while (iter.hasNext()) {
            doc = iter.nextDoc();
            tm = docValues.readTm(doc);
            inv.markDocTm(doc, tm, isinit);
            inv.bits.add(doc);
            if (isReadDouble) {
              inv.setTmValueDouble(tm,RamTermNumValue.EMPTY_FOR_MARK);
            }
          }
        } else {
          for (doc = 0; doc < maxdoc; doc++) {
            tm = docValues.readTm(doc);
            inv.markDocTm(doc, tm, isinit);
            inv.bits.add(doc);
            if (isReadDouble) {
              inv.setTmValueDouble(tm,RamTermNumValue.EMPTY_FOR_MARK);
            }
          }
        }
      } else {
        if (baseAdvanceDocs != null) {
          DocIterator iter = baseAdvanceDocs.iterator();
          while (iter.hasNext()) {
            doc = iter.nextDoc();
            tm = docValues.readTm(doc);
            inv.markDocTm(doc, tm, isinit);
            inv.bits.add(doc);
            if (isReadDouble) {
              inv.setTmValueLong(tm,  (long) RamTermNumValue.EMPTY_FOR_MARK);
            }
          }
        } else {
          for (doc = 0; doc < maxdoc; doc++) {
            tm = docValues.readTm(doc);
            inv.markDocTm(doc, tm, isinit);
            inv.bits.add(doc);
            if (isReadDouble) {
              inv.setTmValueLong(tm,  (long) RamTermNumValue.EMPTY_FOR_MARK);
            }
          }
        }
      }
     
      long l2=System.currentTimeMillis();

 
      if (isReadDouble) {
        if (inv.fieldDataType == FieldDatatype.d_double) {
          BlockArray<Double> list = inv.getTmValueDouble();
          for (int i = 0; i <=docValues.maxtm; i++) {
            if (list.get(i) <= RamTermNumValue.EMPTY_FOR_MARK_FORCMP) {
              double val = Double.longBitsToDouble(docValues.readTmValue(i,true));
              list.set(i, val);
            }
          }
        } else {
          BlockArray<Long> list = inv.getTmValueLong();
          for (int i = 0; i <=docValues.maxtm; i++) {
            if (list.get(i) <= RamTermNumValue.EMPTY_FOR_MARK_FORCMP) {
              long val = docValues.readTmValue(i,false);
              list.set(i, val);
            }
          }
        }
 
      }
     
      long l3=System.currentTimeMillis();

      if (isreadText) {
        ArrayList<String> lst = docValues.lst;
        ti.nTerms = docValues.maxtm;
        ti.sizeOfStrings = docValues.sizeOfStrings;
        ti.index = new IndexSearch();
        ti.index.index = lst != null ? lst.toArray(new String[lst.size()]) : new String[0];
      }else if(isinit){
        ti.nTerms = docValues.maxtm;
        ti.sizeOfStrings = 0;
        ti.index = new IndexSearch();
        ti.index.index =  new String[0];
      }
      long l4=System.currentTimeMillis();


      log.info("file timetaken:"+(l4-l3)+","+(l3-l2)+","+(l2-l1)+","+(l1-l0));
      return docValues.maxtm;
   

  }

}
TOP

Related Classes of org.apache.solr.request.uninverted.RamDocValueFill

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.