Package org.apache.solr.handler.component

Source Code of org.apache.solr.handler.component.QueryComponent

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.solr.handler.component;

import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.*;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.*;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.mdrill.FdtMdrillCollector;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.search.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.net.URL;
import java.util.*;


public class QueryComponent extends SearchComponent
{
  protected static Logger log = LoggerFactory.getLogger(QueryComponent.class);
  public static final String COMPONENT_NAME = "query";
 
  @Override
  public void prepare(ResponseBuilder rb) throws IOException
  {

    SolrQueryRequest req = rb.req;
    SolrParams params = req.getParams();
    if (!params.getBool(COMPONENT_NAME, true)) {
      return;
    }

    int fieldFlags = 0;

    rb.setFieldFlags( fieldFlags );

    String defType = params.get(QueryParsing.DEFTYPE,QParserPlugin.DEFAULT_QTYPE);
    if (rb.getQueryString() == null) {
      rb.setQueryString( params.get( CommonParams.Q ) );
    }

    try {
      QParser parser = QParser.getParser(rb.getQueryString(), defType, req);
      rb.setQuery( parser.getQuery() );
      rb.setSortSpec( parser.getSort(true) );
      rb.setQparser(parser);

      String[] fqs = req.getParams().getParams(CommonParams.FQ);
      if (fqs!=null && fqs.length!=0) {
        List<Query> filters = rb.getFilters();
        if (filters==null) {
          filters = new ArrayList<Query>(fqs.length);
        }
        for (String fq : fqs) {
          if (fq != null && fq.trim().length()!=0) {
            QParser fqp = QParser.getParser(fq, null, req);
            filters.add(fqp.getQuery());
          }
        }
        if (!filters.isEmpty()) {
          rb.setFilters( filters );
        }
      }
    } catch (ParseException e) {
      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
    }


  }

  /**
   * Actually run the query
   */
  @Override
  public void process(ResponseBuilder rb) throws IOException
  {
    SolrQueryRequest req = rb.req;
    SolrQueryResponse rsp = rb.rsp;
    SolrParams params = req.getParams();
    if (!params.getBool(COMPONENT_NAME, true)) {
      return;
    }
    SolrIndexSearcher searcher = req.getSearcher();

    if (rb.getQueryCommand().getOffset() < 0) {
      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'start' parameter cannot be negative");
    }

    // -1 as flag if not set.
    long timeAllowed = (long)params.getInt( CommonParams.TIME_ALLOWED, -1 );

    SolrIndexSearcher.QueryCommand cmd = rb.getQueryCommand();
    cmd.setTimeAllowed(timeAllowed);
    SolrIndexSearcher.QueryResult result = new SolrIndexSearcher.QueryResult();
     
    if(params.getBool("fetchfdt", false))
    {
       String crcget=params.get("mdrill.crc.key.get",null);
         if(crcget!=null)
         {
           result.setDocSet(new BitDocSet());
         }else{
          //TODO QUICK TOP N
          ArrayList<Query> qlist=new ArrayList<Query>();
          List<Query> list=rb.getFilters();
          if(list!=null)
          {
            for(Query q:list)
            {
              qlist.add(q);
            }
          }
        qlist.add(rb.getQuery());
   
         
          BooleanQuery query=new BooleanQuery();
          for(Query q:qlist)
          {
            query.add(q, BooleanClause.Occur.MUST);
          }
          int offset = params.getInt(FacetParams.FACET_CROSS_OFFSET, 0);
        int limit = params.getInt(FacetParams.FACET_CROSS_LIMIT, 100);
        int limit_offset=offset+limit;
          FdtMdrillCollector coll=new FdtMdrillCollector(limit_offset+2,searcher.maxDoc());
          searcher.ScoreFind(query, null,coll);
          result.setDocSet(new BitDocSet(coll.getBits()));
         }
     
    }else{
      searcher.search(result,cmd);
    }
    rb.setResult( result );
    rsp.add("response",rb.getResults().docList);
  }
 
 


  @Override
  public int distributedProcess(ResponseBuilder rb) throws IOException {
    ShardRequest sreq = new ShardRequest();
    sreq.params = new ModifiableSolrParams(rb.req.getParams());
    rb.addRequest(this, sreq);
    return ResponseBuilder.STAGE_DONE;
  }



  @Override
  public void handleResponses(ResponseBuilder rb, ShardRequest sreq) {

  }



  @Override
  public void finishStage(ResponseBuilder rb) {

  }

  @Override
  public String getDescription() {
    return "query";
  }

  @Override
  public String getVersion() {
    return "$Revision: 1173289 $";
  }

  @Override
  public String getSourceId() {
    return "$Id: QueryComponent.java 1173289 2011-09-20 18:18:55Z mvg $";
  }

  @Override
  public String getSource() {
    return "$URL: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene_solr_3_5/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java $";
  }

  @Override
  public URL[] getDocs() {
    return null;
  }
}
TOP

Related Classes of org.apache.solr.handler.component.QueryComponent

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.