Package org.apache.solr.request.mdrill

Source Code of org.apache.solr.request.mdrill.MdrillParseDetail$fetchContaioner

package org.apache.solr.request.mdrill;

import java.io.IOException;
import java.util.Collections;
import java.util.PriorityQueue;

import org.apache.lucene.index.SegmentReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.compare.SelectDetailRow;
import org.apache.solr.request.compare.ShardDetailSelectDetailRowCompare;
import org.apache.solr.request.compare.ShardDetailSelectDetailRowStringCompare;
import org.apache.solr.request.compare.UniqTypeNum;
import org.apache.solr.request.join.HigoJoinInvert;
import org.apache.solr.request.join.HigoJoinSort;
import org.apache.solr.request.join.HigoJoinUtils;
import org.apache.solr.request.mdrill.MdrillUtils.UnvertFields;
import org.apache.solr.request.mdrill.MdrillUtils.UnvertFile;
import org.apache.solr.request.uninverted.UnInvertedField;
import org.apache.solr.search.DocSet;
import org.apache.solr.search.SolrIndexSearcher;

public class MdrillParseDetail {
  public int offset ;
  public String sort_fl;
  public boolean isNeedSort=true;
  public int limit_offset=0;
  public String[] joinList ;
  public boolean isdesc;
  public String sort_column_type;
 
  public String crcOutputSet=null;
  public MdrillParseDetail(SolrParams params)
  {
    this.joinList=params.getParams(HigoJoinUtils.getTables());
    if(this.joinList==null)
    {
      this.joinList= new String[0];
    }
    this.offset = params.getInt(FacetParams.FACET_CROSS_OFFSET, 0);
    int limit = params.getInt(FacetParams.FACET_CROSS_LIMIT, 100);
    this.limit_offset=this.offset+limit;
    this.sort_fl=params.get(FacetParams.FACET_CROSS_SORT_FL,null);
   
    if(this.sort_fl==null||this.sort_fl.isEmpty())
    {
      this.sort_fl="higoempty_sort_s";
      this.isNeedSort=false;
    }
    this.sort_column_type=params.get("facet.cross.sort.cp");
    this.isdesc=params.getBool(FacetParams.FACET_CROSS_SORT_ISDESC, true);
    this.crcOutputSet=params.get("mdrill.crc.key.set");


  }
  public fetchContaioner createContainer(String[] fields, DocSet baseDocs,SegmentReader reader,SolrIndexSearcher searcher,SolrQueryRequest req) throws IOException, ParseException
  {
    return new fetchContaioner(this,fields,baseDocs,reader,searcher,req);
  }
  public static class fetchContaioner{
    public ShardDetailSelectDetailRowCompare cmpTermNum;
    public ShardDetailSelectDetailRowStringCompare cmpresult;
//    public UnvertFields ufs=null;
    public UnvertFields sortufs=null;
    public HigoJoinInvert[] joinInvert={};
    public UniqTypeNum.SelectDetailSort SelectDetailSort=null;
    public boolean nonJoins=true;
    public MdrillParseDetail parse;
    public PriorityQueue<SelectDetailRow> res;
    public int groupbySize;
   
    HigoJoinInvert invforSortValue=null;
    int invforSortOffset=0;
    UnInvertedField columnSortcif=null;
    public String[] fields;
   
    public fetchContaioner(MdrillParseDetail parse,String[] fields, DocSet baseDocs,SegmentReader reader,SolrIndexSearcher searcher,SolrQueryRequest req) throws IOException, ParseException
    {
      this.parse=parse;
      this.fields=fields;
      sortufs=new UnvertFields(baseDocs,new String[]{parse.sort_fl}, reader,searcher.getPartionKey(),searcher.getSchema(),true);
      this.joinInvert=new HigoJoinInvert[parse.joinList.length];

      HigoJoinSort[] joinSort=new HigoJoinSort[this.parse.joinList.length];

      for(int i=0;i<this.parse.joinList.length;i++)
      {
        joinSort[i]=new HigoJoinSort(this.parse.joinList[i], req);
        this.joinInvert[i]=new HigoJoinInvert(this.parse.joinList[i], reader,searcher.getPartionKey(),searcher.getSchema());

        this.joinInvert[i].open(req);
        baseDocs=this.joinInvert[i].filterByRight(baseDocs);
      }
      this.SelectDetailSort=UniqTypeNum.parseSelectDetailType(fields, joinSort);
      this.cmpTermNum=new ShardDetailSelectDetailRowCompare(this.parse.isdesc);
      if(this.SelectDetailSort!=null)
      {
        this.parse.isNeedSort=true;
        this.cmpresult=new ShardDetailSelectDetailRowStringCompare("string",this.parse.isdesc);
        this.invforSortOffset=this.SelectDetailSort.selfOffset;
        this.invforSortValue=this.joinInvert[this.SelectDetailSort.sortIndex];


      }else{
        this.cmpresult=new ShardDetailSelectDetailRowStringCompare(this.parse.sort_column_type,this.parse.isdesc);
        if(this.isColumnSort())
        {
          UnvertFile uf=this.sortufs.cols[0];
          this.columnSortcif=uf.uif;
        }
      }
     
      res = new PriorityQueue<SelectDetailRow>this.parse.limit_offset, Collections.reverseOrder(cmpTermNum));
     
      this.groupbySize=this.fields.length;
      for(HigoJoinInvert inv:joinInvert)
      {
        this.groupbySize+=inv.fieldCount();
      }
      this.nonJoins=this.joinInvert.length<=0;

     
     
    }
   
    public boolean containsInJoins(int doc) throws IOException
    {
      if(this.nonJoins)
      {
        return true;
      }
     
      for(HigoJoinInvert inv:this.joinInvert)
      {
        if(!inv.contains(doc))
        {
          return false;
        }
      }
      return true;
    }
   
    public boolean isUseJoinSort()
    {
      return this.SelectDetailSort!=null;
    }
   
    public boolean isColumnSort()
    {
      return this.parse.isNeedSort&&this.sortufs.listIndex.length>0;
    }
   
    public boolean isOnlyColumnSort()
    {
      return this.parse.isNeedSort&&this.SelectDetailSort==null;
    }
   
    public int getJoinCompareValue(int doc) throws IOException
    {
      return this.invforSortValue.fieldNumForSort(doc, this.invforSortOffset);
    }
   
    public int getColumnCompareValue(int doc) throws IOException
    {
      return columnSortcif.termNum(doc);
    }
   
    public void free()
    {
      for(int i=0;i<this.parse.joinList.length;i++)
      {
        this.joinInvert[i].close();
      }
      sortufs.free();
      GroupListCache.cleanFieldValueCache(groupbySize);
      SelectDetailRow.CLEAN();
    }
  }

}
TOP

Related Classes of org.apache.solr.request.mdrill.MdrillParseDetail$fetchContaioner

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.